在servlet重定向之前使用过滤器修改响应URL(Java/Tomcat)
我正在尝试使用在servlet重定向之前使用过滤器修改响应URL(Java/Tomcat),tomcat,servlets,httpresponse,servlet-filters,Tomcat,Servlets,Httpresponse,Servlet Filters,我正在尝试使用servlet过滤器修改servlet的响应URL,然后servlet本身发出响应。sendRedirect。但这件事让我一事无成。我首先使用servlet进行测试,然后设置一些虚拟JSP页面来复制servlet的相同基本行为。servlet来自第三方供应商,无法修改 对于这个问题,我将继续使用JSP页面,并假设它们无法修改。如果我可以修改servlet,就不需要发布这个问题了 我还引用了下面的两个主题来帮助我构建过滤器 servlet/JSP中发生的事情是,它加载了https
servlet过滤器修改servlet的响应URL,然后servlet本身发出响应。sendRedirect
。但这件事让我一事无成。我首先使用servlet进行测试,然后设置一些虚拟JSP
页面来复制servlet的相同基本行为。servlet来自第三方供应商,无法修改
对于这个问题,我将继续使用JSP页面,并假设它们无法修改。如果我可以修改servlet,就不需要发布这个问题了
我还引用了下面的两个主题来帮助我构建过滤器
servlet/JSP中发生的事情是,它加载了https
,然后基于当前URL构建了一个新的URL
,添加了querystring参数
,cacheid,并重新加载页面,即
我希望它看起来像这样:
因此,我的想法是构建一个截取响应的过滤器,在servlet/JSP发出响应之前。sendRedirect,修改位置和状态头,它应该可以工作。但它不太管用
testfilter.jsp
<%
if (request.getParameter("cacheid") == null) {
response.sendRedirect("http:/example.com/test/testfilter.jsp?cacheid=123456");
}
%>
<html>
<head></head>
<body>Test</body>
</html>
次要问题是我不确定如何在这个修改后的响应中附加querystring参数cacheid及其值
主要问题是过滤器似乎只在第二次调用testfilter.jsp时启动(使用querystring参数cacheid)。以下是原始响应:
HTTP/1.1 302 Moved Temporarily
Content-Length: 0
Content-Type: text/html;charset=ISO-8859-1
Location: http://example.com/test/testfilter.jsp?cacheid=123456
Server: Microsoft-IIS/7.5
Set-Cookie: JSESSIONID=66ACCD1EFF485CE820BB9E705311C31D; Path=/test; Secure
Date: Thu, 25 Aug 2016 19:18:54 GMT
HTTP/1.1 200 OK
Content-Length: 60
Content-Type: text/html;charset=ISO-8859-1
Server: Microsoft-IIS/7.5
Set-Cookie: JSESSIONID=1342FB2D65F5568AC7EA1EF21E6FB8E4; Path=/test
Date: Thu, 25 Aug 2016 19:18:54 GMT
<html>
<head></head>
<body>Test</body>
</html> filtered
HTTP/1.1 302 Moved Temporarily
Content-Length: 0
Content-Type: text/html;charset=ISO-8859-1
Location: http://example.com/test/testfilter.jsp?cacheid=123456
Server: Microsoft-IIS/7.5
Set-Cookie: JSESSIONID=66ACCD1EFF485CE820BB9E705311C31D; Path=/test; Secure
Date: Thu, 25 Aug 2016 19:18:54 GMT
HTTP/1.1 200 OK
Content-Length: 60
Content-Type: text/html;charset=ISO-8859-1
Server: Microsoft-IIS/7.5
Set-Cookie: JSESSIONID=1342FB2D65F5568AC7EA1EF21E6FB8E4; Path=/test
Date: Thu, 25 Aug 2016 19:18:54 GMT
<html>
<head></head>
<body>Test</body>
</html> filtered
HTTP/1.1200正常
内容长度:60
内容类型:text/html;字符集=ISO-8859-1
服务器:Microsoft IIS/7.5
设置Cookie:JSESSIONID=1342FB2D65F5568AC7EA1EF21E6FB8E4;路径=/test
日期:2016年8月25日星期四19:18:54 GMT
试验
过滤
如果我能让过滤器第一次截获它,在它发送自己的重定向之前,我会被设置好。但事情似乎从来没有这么简单
我希望我解释得足够好,问题是什么。任何帮助都将不胜感激
谢谢。设置Nginx并将此类逻辑移到Nginx指令代理中。\u重定向是一种解决方法 我被同样的问题困住了。你找到解决这个问题的方法了吗?