gpt4 book ai didi

jsp - 如何在服务器发送响应之前使用 servlet 过滤器拦截页面请求,将 jsessionid 附加到响应 URL

转载 作者:行者123 更新时间:2023-11-28 23:46:23 25 4
gpt4 key购买 nike

我有一个 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。然后,由于我已应用调用所有 JSP 页面的规则,再次调用 Content.jsp 并不断重定向。

要么我必须更改我的代码,要么以某种方式在 servlet 访问页面之前拦截它。我该如何解决这个问题?也许,我可以检查 jsessionid 是否附加到 URL,但我该怎么做???

谢谢。

最佳答案

如果我没看错的话,我希望它会无限循环。

!request.isSecure(),是在询问“客户端是否使用了 https?”。由于重定向永远不会更改此特性,因此重定向也不会使用 https 并再次输入该 if-block。

我建议 if 语句应该改为检查 jsessionid 是否未在 url 中设置。

关于jsp - 如何在服务器发送响应之前使用 servlet 过滤器拦截页面请求,将 jsessionid 附加到响应 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com