diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/MyFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/MyFilter.java new file mode 100644 index 00000000..ebf973d1 --- /dev/null +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/MyFilter.java @@ -0,0 +1,15 @@ +package io.github.kimmking.gateway.filter; + +import io.netty.handler.codec.http.FullHttpResponse; + +/** + * @Description TODO + * @Author Will + * @Date 2022/3/20 9:07 PM + */ +public class MyFilter implements HttpResponseFilter{ + @Override + public void filter(FullHttpResponse response) { + response.headers().set("name","will"); + } +} 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 69b40fde..050d485d 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 @@ -2,22 +2,36 @@ import io.github.kimmking.gateway.filter.HeaderHttpRequestFilter; import io.github.kimmking.gateway.filter.HttpRequestFilter; +import io.github.kimmking.gateway.filter.HttpResponseFilter; +import io.github.kimmking.gateway.filter.MyFilter; import io.github.kimmking.gateway.outbound.httpclient4.HttpOutboundHandler; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpUtil; import io.netty.util.ReferenceCountUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; +import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT; +import static io.netty.handler.codec.http.HttpResponseStatus.OK; +import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; +import static io.netty.handler.codec.rtsp.RtspHeaderNames.CONNECTION; +import static io.netty.handler.codec.rtsp.RtspHeaderValues.KEEP_ALIVE; + public class HttpInboundHandler extends ChannelInboundHandlerAdapter { private static Logger logger = LoggerFactory.getLogger(HttpInboundHandler.class); private final List proxyServer; private HttpOutboundHandler handler; private HttpRequestFilter filter = new HeaderHttpRequestFilter(); + private MyFilter myFilter = new MyFilter(); public HttpInboundHandler(List proxyServer) { this.proxyServer = proxyServer; @@ -37,10 +51,10 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { // String uri = fullRequest.uri(); // //logger.info("接收到的请求url为{}", uri); // if (uri.contains("/test")) { -// handlerTest(fullRequest, ctx); + handlerTest(fullRequest, ctx, myFilter); // } - handler.handle(fullRequest, ctx, filter); +// handler.handle(fullRequest, ctx, filter); } catch(Exception e) { e.printStackTrace(); @@ -49,33 +63,33 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { } } -// private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { -// FullHttpResponse response = null; -// try { -// String value = "hello,kimmking"; -// 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()); -// -// } catch (Exception e) { -// logger.error("处理测试接口出错", e); -// response = new DefaultFullHttpResponse(HTTP_1_1, NO_CONTENT); -// } finally { -// if (fullRequest != null) { -// if (!HttpUtil.isKeepAlive(fullRequest)) { -// ctx.write(response).addListener(ChannelFutureListener.CLOSE); -// } else { -// response.headers().set(CONNECTION, KEEP_ALIVE); -// ctx.write(response); -// } -// } -// } -// } -// -// @Override -// public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { -// cause.printStackTrace(); -// ctx.close(); -// } + private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx, HttpResponseFilter filter) { + FullHttpResponse response = null; + try { + String value = "hello,kimmking"; + 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()); + filter.filter(response); + } catch (Exception e) { + logger.error("处理测试接口出错", e); + response = new DefaultFullHttpResponse(HTTP_1_1, NO_CONTENT); + } finally { + if (fullRequest != null) { + if (!HttpUtil.isKeepAlive(fullRequest)) { + ctx.write(response).addListener(ChannelFutureListener.CLOSE); + } else { + response.headers().set(CONNECTION, KEEP_ALIVE); + ctx.write(response); + } + } + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + cause.printStackTrace(); + ctx.close(); + } }