删除HttpServletResponse标头

时间:2016-08-10 07:08:12

标签: java servlets servlet-filters

我正在处理的应用程序的工作方式是将请求从浏览器发送到服务器A,服务器A对请求进行一些修改并将其转发到服务器B.服务器B将响应返回给服务器A将其返回到浏览器(浏览器< =>服务器A< =>服务器B)。

在服务器A,我需要修改/删除特定标题" access-control-allow-origin"从服务器B给出的响应中我无法在B处创建响应,因为我无法访问代码。我需要在A本身这样做。

我尝试使用HttpServletResponseWrapper(How do delete a HTTP response header?),但我认为仅在未设置标头时才有用。在我的情况下,标题已设置,需要修改/删除。

2 个答案:

答案 0 :(得分:0)

使用任何Servlet API删除标头几乎是不可能的, 我看到的唯一解决方案是你的Servlet容器前面是否有Apache / Nginx(Web服务器) 使用mod_headers

RequestHeader unset HeaderName

有关详细信息,请参阅此document

答案 1 :(得分:0)

试试这个:

((org.apache.catalina.connector.Response)response).getCoyoteResponse()
    .getMimeHeaders()
    .removeHeader("access-control-allow-origin");

getCoyoteResponse()获取底层的Response对象,该对象是标头实际存储在MimeHeaders对象中的位置。 MimeHeaders有一个方便的removeHeader方法,等等。

请注意,我实际上没有对此进行测试,但它看起来应该可行。另外,我在Tomcat 8.0.26源代码中找到了这个,YMMV有不同的版本。