【问题标题】:Overwrite HTTP Header in CXF (JAX-RS)覆盖 CXF 中的 HTTP 标头 (JAX-RS)
【发布时间】:2018-02-12 21:11:42
【问题描述】:

我想在从服务器向客户端发送回复之前更改 HTTP 标头“连接”的值。

我的用例:我有一个位于负载均衡器后面的 JAX-RS Web 服务。 Web 服务客户端使用“Connection: Keep-Alive”发送请求。结果:连接保持打开状态,负载均衡器没有平衡 :-)

所以我希望我的 Web 服务每隔几百个请求就回复一个“连接:关闭”,以强制客户端打开一个新连接。

如何使用 CXF 做到这一点?

【问题讨论】:

    标签: java web-services jax-rs cxf


    【解决方案1】:

    您可以使用ContainerResponseFilter 将所需的标头添加到发送的响应中。

    一个例子:

    import java.io.IOException;
    
    import javax.ws.rs.container.ContainerRequestContext;
    import javax.ws.rs.container.ContainerResponseContext;
    import javax.ws.rs.container.ContainerResponseFilter;
    import javax.ws.rs.core.MultivaluedMap;
    import javax.ws.rs.ext.Provider;
    
    @Provider
    public class ResponseFilter implements ContainerResponseFilter {
    
        public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
                throws IOException {
            MultivaluedMap<String, Object> headers = responseContext.getHeaders();
            headers.putSingle("Connection", "close");
        }
    
    }
    

    在您的javax.ws.rs.core.Application 中将此类声明为提供者。

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 2011-01-06
      • 2010-12-24
      相关资源
      最近更新 更多