我正在处理的应用程序的工作方式是将请求从浏览器发送到服务器A,服务器A对请求进行一些修改并将其转发到服务器B.服务器B将响应返回给服务器A将其返回到浏览器(浏览器< =>服务器A< =>服务器B)。
在服务器A,我需要修改/删除特定标题" access-control-allow-origin"从服务器B给出的响应中我无法在B处创建响应,因为我无法访问代码。我需要在A本身这样做。
我尝试使用HttpServletResponseWrapper(How do delete a HTTP response header?),但我认为仅在未设置标头时才有用。在我的情况下,标题已设置,需要修改/删除。
答案 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有不同的版本。