【问题标题】: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 中将此类声明为提供者。