0

我在 Struts2 上有一个拦截器,我希望某些页面重定向到它们的 ssl 版本。

示例:http://localhost/xhtml/path.do?ossesionid=value1https://localhost/xhtml/path.do?ossesionid=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 的创建,请参阅此讨论线程。

我仍然不确定您在使用此会话 ID 时遇到的问题是什么,因为它在 Web 应用程序中很常见

于 2012-04-19T19:02:43.563 回答