0

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 に追加されたかどうかを確認できますが、どうすればそれを行うことができますか?

ありがとうございました。

4

1 に答える 1

0

正しく読んでいれば、無期限にループすると予想されます。

!request.isSecure()、「クライアントは https を使用しましたか?」と尋ねています。リダイレクトはこの特性を決して変更しないため、リダイレクトも https を使用せず、その if-block を再度入力します。

代わりに、if ステートメントで jsessionid が URL に設定されていないかどうかを確認することをお勧めします。

于 2012-12-10T18:11:55.423 に答える