我有一个servlet过滤器,它接受jsessionid并将其附加到响应中。但是,它无法正常工作,因为应用程序陷入无限循环。代码看起来是正确的,但Tomcat如何处理请求和响应是混淆的地方。
下面是doFilter方法(destroy和init是空白的):
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) {
HttpServletRequest rQ = ((HttpServletRequest)request);
HttpServletResponse rS = ((HttpServletResponse)response);
if ((!request.isSecure())) {
String uRL = rS.getRequestURL().toString();
String qS = (rS.getQueryString() == null) ? "" : rS.getQueryString();
String sID = rS.getSession().getId();
String redirectURL = uRL + ";jsessionid=" + sID + qS;
rS.sendRedirect(redirectURL);
}
else {
chain.doFilter(request, response);
}
}
}
我已将过滤器应用于所有JSP页面。我看到的是一个http JSP页面被调用 - 让我们称之为Content.jsp - 并且servlet接受这个页面并附加jsessionid。然后,再次调用Content.jsp,因为我已应用于调用所有JSP页面的规则并且它会不断重定向。
要么我必须更改我的代码,要么在servlet访问页面之前以某种方式拦截它。我该如何解决这个问题?也许,我可以检查jsessionid是否附加到URL但我怎么能这样做?
谢谢。
答案 0 :(得分:0)
如果我正确地读它,我希望它无限循环。
!request.isSecure()
,问“客户端是否使用https?”。由于重定向永远不会改变此特性,因此重定向也不会使用https并再次输入if-block。
我建议if语句应该检查是否在网址中没有设置jsessionid。