我有一个 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 但我怎么能这样做???
谢谢你。