覆盖Zuul的连接头Keep-Alive

时间:2016-09-14 08:14:51

标签: spring-boot spring-cloud spring-websocket netflix-zuul spring-cloud-netflix

我有以下申请: 网关服务 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;
    }
}

0 个答案:

没有答案