【发布时间】:2015-10-20 22:08:30
【问题描述】:
我有一个在 Apache Tomcat 7 中运行并使用 Struts2 的 Web 应用程序。 我的登录系统是通过在会话中放置一个用户对象来实现的:
(绕过“if”和“try”以明确..)
UserService es = new UserService();
User user = es.login(username, password);
ActionContext.getContext().getSession().put("loggedUser", user);
然后,我尝试从拦截器中的会话中获取用户对象。如果正常,则有人登录。如果没有,则通过返回“notLogged”进入登录页面,Struts2 global-results 将在 struts.xml 中捕获该信息:
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(或某些网络基础设施更改从响应或请求中删除了 cookie)。可以避免使用 cookie,但必须正确编码所有 URL(例如,使用
标记)。检查cookie消失的位置。询问服务器管理员他做了什么导致这个问题。 -
对不起。事实并非如此。我说这是在管理员更改一些服务器后开始的。我尝试的每个浏览器怎么会开始拒绝 cookie?任何地方。什么阴谋?不在浏览器中。我之前没有在 URL 中看到过这个 ID。
-
据我所知,唯一的变化是服务器访问重定向从eic.cefet-rj.br/sagitarii 到eic.cefet-rj.br/rukbat/app/sagitarii。这是重定向到内部网络的外部访问 (
: \sagitarii ) -
可能与 cookie 路径有关。尝试更改 sessionCookiePath
-
@bayou.io :非常感谢。通过将
<Context sessionCookiePath="/">放入服务器context.xml 来解决。请把它作为答案让我接受。
标签: java configuration struts2 tomcat7 session-cookies