diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/AddNameToRequestHeaderFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/AddNameToRequestHeaderFilter.java new file mode 100644 index 00000000..f87bde75 --- /dev/null +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/AddNameToRequestHeaderFilter.java @@ -0,0 +1,13 @@ +package io.github.kimmking.gateway.filter; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.*; + +public class AddNameToRequestHeaderFilter implements HttpRequestFilter { + + @Override + public void filter(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { + HttpHeaders headers = fullRequest.headers(); + headers.add("nio", "soda"); + } +} diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java index 22fb2525..28112957 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java @@ -1,5 +1,7 @@ package io.github.kimmking.gateway.inbound; +import io.github.kimmking.gateway.filter.AddNameToRequestHeaderFilter; +import io.github.kimmking.gateway.filter.HttpRequestFilter; import io.github.kimmking.gateway.outbound.httpclient4.HttpOutboundHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; @@ -13,10 +15,12 @@ public class HttpInboundHandler extends ChannelInboundHandlerAdapter { private static Logger logger = LoggerFactory.getLogger(HttpInboundHandler.class); private final String proxyServer; private HttpOutboundHandler handler; + private HttpRequestFilter filter; public HttpInboundHandler(String proxyServer) { this.proxyServer = proxyServer; handler = new HttpOutboundHandler(this.proxyServer); + filter = new AddNameToRequestHeaderFilter(); } @Override @@ -34,7 +38,8 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { // if (uri.contains("/test")) { // handlerTest(fullRequest, ctx); // } - + + filter.filter(fullRequest, ctx); handler.handle(fullRequest, ctx); } catch(Exception e) { diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java index 856dc168..aaa3d4b5 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java @@ -17,6 +17,7 @@ import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; +import java.util.Map; import java.util.concurrent.*; import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT; @@ -62,6 +63,9 @@ public void handle(final FullHttpRequest fullRequest, final ChannelHandlerContex private void fetchGet(final FullHttpRequest inbound, final ChannelHandlerContext ctx, final String url) { final HttpGet httpGet = new HttpGet(url); //httpGet.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_CLOSE); + for (Map.Entry header : inbound.headers()) { + httpGet.setHeader(header.getKey(), header.getValue()); + } httpGet.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE); httpclient.execute(httpGet, new FutureCallback() { @Override @@ -95,13 +99,14 @@ private void handleResponse(final FullHttpRequest fullRequest, final ChannelHand // response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(value.getBytes("UTF-8"))); // response.headers().set("Content-Type", "application/json"); // response.headers().setInt("Content-Length", response.content().readableBytes()); - - + //作业第一步,把从后端拿到响应内容,换成写死的helloworld byte[] body = EntityUtils.toByteArray(endpointResponse.getEntity()); -// System.out.println(new String(body)); -// System.out.println(body.length); + System.out.println("httpClient proxy got body: " + new String(body)); + //写死的替换内容 + String homeworkResp = "helloworld"; + System.out.println("homework step3, change resp to `helloworld`"); - response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(body)); + response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(homeworkResp.getBytes())); response.headers().set("Content-Type", "application/json"); response.headers().setInt("Content-Length", Integer.parseInt(endpointResponse.getFirstHeader("Content-Length").getValue()));