我可以通过HTTP使用jsp,servlet和公共数据存储(hibernate)在不同的端口号上使用jetty启动2个项目。其中一个项目是" public" web(端口8080)和另一个项目是" admin web" (端口8899)admin web使用spring security进行登录/注销。但是,当我从公共网站(端口8080)进行插入并且不使用弹簧安全性时,带有端口8899的弹簧安全性的会话被破坏,我被注销并且必须再次登录才能看到公众的更新这两个项目在maven jetty插件配置中具有相同的上下文(" / foo"),但在不同的端口上,因此行为有些出乎意料。如果我使用2个不同的上下文,端口8080上的/ foo和端口8899上的/ zar然后Spring安全会话仍然存在。是否有一些原因导致配置为什么不能为不同的端口或其他东西提供相同的上下文,这是为什么用户在另一个项目的另一个端口号插入数据库后注销的原因?
答案 0 :(得分:1)
是否有某些原因导致配置无法为不同的端口提供相同的上下文
是。 cookie标准表示不同端口上的服务计为相同的来源。这是不幸的,因为它与JavaScript同源策略不同,它几乎不是你想要的,但我们现在仍然坚持它。
因此,如果您在端口8080服务上设置JSESSIONID cookie,它将覆盖端口8999服务设置的任何先前的JSESSIONID cookie。当您返回到8999服务时,8080服务生成的cookie未知,因此您无法识别为已登录。
解决方法包括:
<session-config><cookie-config><name>
); crossContext="true"
)。我建议(2)。