java - JSESSIONID 出现在 URL 中后,我的 Web 应用程序停止工作

标签 java configuration struts2 tomcat7 session-cookies

我有一个在 Apache Tomcat 7 中运行并使用 Struts2 的 Web 应用程序。 我的登录系统是通过将 User 对象放入 session 中来实现的:

(为了清楚起见,绕过“如果”和“尝试”..)

UserService es = new UserService();
User user = es.login(username, password);
ActionContext.getContext().getSession().put("loggedUser", user);

然后,我尝试从拦截器中的 session 中获取用户对象。如果正常,则有人已登录。如果没有,则通过返回“notLogged”进入登录页面,该“notLogged”将被struts.xml中的Struts2全局结果捕获:

public String intercept(ActionInvocation invocation) {
    User loggedUser = (User)invocation.getInvocationContext().getSession().get("loggedUser");
    if (loggedUser == null) {
        return "notLogged";
    }
    try {
        return invocation.invoke();
    } catch ( Exception ignored ) {
        return "notLogged";
    }
}

struts.xml

<global-results>
    <result name="notLogged">/index.jsp</result> 
</global-results>

一切都很好,直到服务器管理员进行一些维护并且“jsessionid”开始出现在 URL 中。此后,我无法再导航我的系统(直到我将此 ID 复制并粘贴到我想要访问的每个 URL 中。无法形成操作目的地)。我仍然能够登录,并且我看到 User 对象仍然在捕获,但如果没有此 ID,我无法前往任何目的地。

我试过这个:https://fralef.me/tomcat-disable-jsessionid-in-url.html ,并将 COOKIE 放入我的 web.xml 中的 tracking-mode 标记中,但情况变得最糟糕,因为现在我什至无法登录。

发生了什么事,我该如何解决这个问题并使我的系统恢复工作?

最佳答案

这显然是由 cookie 路径不匹配引起的。

只有当请求 URL 路径与 cookie 路径匹配时,浏览器才会发回 cookie,例如

 cookie path :  /abc
request path:   /abc/xyz   // match
request path:   /xyz       // no match

默认情况下,Tomcat 将 session Cookie 路径设置为 Web 应用程序路径,这样 Cookie 就不会发送到其他 Web 应用程序。但是,在您的情况下,中间件更改了请求 URL 路径,因此浏览器观察到不同的路径,导致 cookie 路径不匹配。

在大多数情况下,我建议将 cookie 路径设置为“/”,以便它匹配对服务器的所有请求(假设 Tomcat 上只有一个应用程序)

// context.xml
<Context sessionCookiePath="/">

关于java - JSESSIONID 出现在 URL 中后,我的 Web 应用程序停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33247677/

相关文章:

java - 是否可以在 Vaadin 14 的一个组件中以内联模式使用两个 DatePicker?

php - Zend Framework 将开发人员特定的环境信息与配置分开?

tomcat - 如何使用 maven :run with my custom configuration file? 运行 Tomcat

css - Aptana,CSS 编辑器(配置)

java - 如何为以下内容定义 EclipseLink 注释?

java - Spring Boot Actuate 实例化错误

java - 从 RandomAccessFile 中读取数据产生不正确的结果 - Java

javascript - Struts2 自动完成器 - 单击提交按钮时条目丢失

java - 使用struts 2标签检索ArrayList的元素而不使用s :iterate

struts2 - 如何在 Struts 标签中添加注释?