0

Struts2 に Interceptor があり、いくつかのページをそれらの ssl バージョンにリダイレクトしたいと考えています。

例: http://localhost/xhtml/path.do?ossessionid=value1からhttps://localhost/xhtml/path.do?ossessionid=value1

これを行うために、これを行うインターセプターを作成しました。

public String intercept(ActionInvocation invocation) throws Exception {

    // initialize request and response
    final ActionContext context = invocation.getInvocationContext();
    final HttpServletRequest request = (HttpServletRequest) context
            .get(StrutsStatics.HTTP_REQUEST);
    final HttpServletResponse response = (HttpServletResponse) context
            .get(StrutsStatics.HTTP_RESPONSE);

    // check scheme
    String scheme = request.getScheme().toLowerCase();

    // check method
    String method = request.getMethod().toUpperCase();

    // If the action class uses the SSLProtected marker annotation, then see
    // if we need to
    // redirect to the SSL protected version of this page
    if (invocation.getAction() instanceof SSLProtected) {

        if (HTTP_GET.equals(method) && SCHEME_HTTP.equals(scheme)) {

            // initialize https port
            String httpsPortParam = request.getSession().getServletContext().getInitParameter(HTTP_PORT_PARAM);
            int httpsPort = httpsPortParam == null ? HTTPS_PORT : Integer.parseInt(httpsPortParam);

            response.setCharacterEncoding("UTF-8");

            URI uri = new URI(SCHEME_HTTPS, null, request.getServerName(), httpsPort, response.encodeRedirectURL(request.getRequestURI()), request.getQueryString(), null);

            log.debug("Going to SSL mode, redirecting to " + uri.toString());

            response.sendRedirect(uri.toString());
            return null;
        }
    }

私の問題は、私がこれを期待していることです

https://localhost/xhtml/path.do?ossesionid=value1

そして得た

https://localhost/xhtml/path.do;jsessionid=value1?osessionid=value1

そして、私は完全に迷っています!誰か助けて?

4

1 に答える 1

0

S2-SSL プラグインを使用することを強くお勧めします。これはより柔軟で、SSL から非 SSL への切り替え、およびその逆の切り替えを処理するためのより優れたサポートを提供します。

Jsessionidの生成については、セッション作成時にJSESSIONID Cookieを作成・送信します。コードが呼び出されたとき、request.getSession()またはrequest.getSession(true)初めてセッションが作成されます。セッションを取得したいだけの場合は、Jsessionid の作成を無効にする方法があります。

この ID の作成を無効にする方法はいくつかあります。このディスカッション スレッドを参照してください。

Webアプリケーションでは非常に一般的なケースであるため、このセッションIDで直面している問題が何であるかはまだわかりません

于 2012-04-19T19:02:43.563 に答える