首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么spring安全会将用户注销?

为什么spring安全会将用户注销?
EN

Stack Overflow用户
提问于 2014-03-11 09:54:22
回答 1查看 277关注 0票数 0

我可以使用jsp、servlet和公共数据存储(hibernate)通过HTTP启动两个具有不同端口号的jetty项目。其中一个项目是“公共”web (端口8080),另一个项目是“管理web”(端口8899),其中管理web使用spring安全性进行登录/注销。但是,当我从不使用spring安全性的公共web (端口8080)中插入时,带有端口8899的spring安全性会话就会中断,我将被注销,并且必须再次登录才能在端口8080上查看来自公共web的更新。这两个项目在maven jetty插件配置中具有相同的上下文("/foo"),但是在不同的端口上,因此这种行为有些出乎意料。如果我使用两个不同的上下文,例如端口8080上的/foo和端口8899上的/zar,那么春季安全会话就会持续存在。为什么配置不能对不同的端口具有相同的上下文,或者解释为什么用户在数据库插入到另一个项目的端口号后被注销?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-11 11:48:34

对于不同的端口,配置不能具有相同的上下文,有什么原因吗?

是。cookie标准规定,不同端口上的服务是相同的来源。这是不幸的,因为它不同于JavaScript相同的原产地政策,它几乎从来不是你想要的,但我们现在被它困住了。

因此,如果在端口8080服务上设置JSESSIONID,它将覆盖由端口8999服务设置的任何先前的JSESSIONID。当您返回到8999服务时,8080服务生成的cookie是未知的,因此无法识别您已登录。

解决办法包括:

  1. 使用不同的路径;
  2. 覆盖默认会话ID cookie名称,以便每个应用程序都有不同的cookie (<session-config><cookie-config><name>);
  3. 在应用程序之间手动共享会话(如Tomcat中的crossContext="true" )。

我建议(2)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22355752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档