忽略Tomcat中特定URI的cookie

时间:2012-04-17 14:04:13

标签: java tomcat servlets cookies jsessionid

我们有以下情况:

JSESSIONID由cookie和URL发送,但由于Adobe Flash BUG,它们是不同的(实际上,cookie JSESSIONID是错误的)。

我们想要做的是使用URL JSESSIONID而不是cookie中发送的URL。换句话说,当我执行request.getSession()时,它应该返回与URL中的ID相关联的HttpSession而不是cookie。

我们查看了Tomcat7源代码,实际上,Tomcat首先解析URL,搜索标识符。然后,如果它们存在,它将使用Cookie SESSIONID覆盖它。以下是在CoyoteAdapter.java(tomcat 7.0.26)中剪切的代码:

        String sessionID = null;
        if (request.getServletContext().getEffectiveSessionTrackingModes()
                .contains(SessionTrackingMode.URL)) {

            // Get the session ID if there was one
            sessionID = request.getPathParameter(
                    SessionConfig.getSessionUriParamName(
                            request.getContext()));
            if (sessionID != null) {
                request.setRequestedSessionId(sessionID);
                request.setRequestedSessionURL(true);
            }
        }

        // Look for session ID in cookies and SSL session
        parseSessionCookiesId(req, request);
        parseSessionSslId(request);

我们可以完全禁用cookie JSESSIONID,但我们不能,因为我们将它用于网站中的所有URL。我们想禁用只有这个特定URL的cookie。

有可能吗?有没有其他想法或解决方法来解决这个问题?

1 个答案:

答案 0 :(得分:-1)

您可以实现一个自定义servlet filter,它将使用您自己的包装器替换请求,响应和会话对象。然后,包装器可以基于URL表现不同,例如,委托或不委托原始会话实例。虽然您无法在不更改Tomcat代码的情况下访问其他ID的会话数据。