netty提供的corsHandler在使用时配置的可能不对,导致跨域存在问题,自己写一个handler,好控制逻辑
public class CorsHandler extends SimpleChannelInboundHandler<HttpObject> {
private static final String METHOD_NAME = "OPTIONS";
@Override
protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
FullHttpRequest request = (FullHttpRequest) msg;
if (METHOD_NAME.equals(request.method().toString())) {
FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
response.headers().set("Access-Control-Allow-Origin", request.headers().get("origin"));
response.headers().set("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
response.headers().set("Access-Control-Allow-Headers","Content-Type, CDS-REQ-TYPE, CDS-SM-VERSION");
response.headers().set("ACCESS-CONTROL-ALLOW-CREDENTIALS","true");
while (!ctx.channel().isWritable()) {
sleep(100);
}
ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
} else {
ctx.fireChannelRead(msg);
}
}
}