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 と呼びましょう)。サーブレットはこのページを取得し、jsessionid を追加します。次に、すべての JSP ページを呼び出すために適用したルールにより、Content.jsp が再度呼び出され、継続的にリダイレクトされます。
サーブレットがページにアクセスする前に、コードを変更するか、どういうわけかインターセプトする必要があります。どうすればこれを解決できますか? おそらく、jsessionid が URL に追加されたかどうかを確認できますが、どうすればそれを行うことができますか?
ありがとうございました。