我有以下申请: 网关服务 API-服务
Gateway-Serivce是Zuul代理,Api-Service基本上是rest + broker + websocket +其他技术。
我正在使用sockjs + stomp通过zuul与经纪人沟通。要进行协议升级,套接字处理程序需要将连接标头设置为升级。当我在网关上请求此连接时,此连接标头设置为“升级”,但在zuul处理标头设置为保持活动之后。 所以第一个问题是,用原始请求头替换连接头是否可以,如果没关系那么该怎么做?使用一些Zuul过滤器?
由于
对于有兴趣的人,这可能是解决方案......所有学分都归于@spencergibb
@Component
public static class WebSocketHeaderFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
RequestWrapper wrapper = new RequestWrapper(ctx.getRequest());
String upgradeHeader = wrapper.getHeader("Upgrade");
if (null == upgradeHeader) {
upgradeHeader = wrapper.getHeader("upgrade");
}
if (null != upgradeHeader && "websocket".equalsIgnoreCase(upgradeHeader)) {
wrapper.addHeader("connection", "Upgrade");
ctx.addZuulRequestHeader("connection", "Upgrade");
ctx.setRequest(wrapper);
}
return null;
}
}