gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:13:00 24 4
gpt4 key购买 nike

我有一个在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com