Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 为什么spring security会注销用户?_Http_Java_Session_Xml - Fatal编程技术网

Http 为什么spring security会注销用户?

Http 为什么spring security会注销用户?,http,java,session,xml,Http,Java,Session,Xml,我可以通过HTTP、jsp、servlet和公共数据存储(hibernate)在不同端口号上使用jetty启动2个项目。其中一个项目是“公共”web(端口8080),另一个项目是“管理web”(端口8899),其中管理web使用spring security进行登录/注销。但是,当我从不使用spring security的公共web(端口8080)进行插入时,带有端口8899的spring security的会话被中断,我被注销,必须再次登录才能在端口8080上查看来自公共web的更新。这两个项

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

为什么配置不能为不同的端口提供相同的上下文

对。cookie标准规定,不同端口上的服务计算为同一来源。这是不幸的,因为它不同于JavaScript同源策略,而且它几乎从来都不是您想要的,但我们现在仍然坚持使用它

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

解决办法包括:

  • 使用不同的路径
  • 覆盖默认会话ID cookie名称,以便每个应用程序都有不同的cookie(
  • 在应用程序之间手动共享会话(例如在Tomcat中使用
    crossContext=“true”

  • 我建议(2)。

    我是否可以将spring security中的会话管理更改为完全不使用cookie,而只使用没有cookie的http会话?http级别上没有会话。(有HTTPS会话,但不会持续很长时间。)有时,通过在URL中包含会话ID可以解决缺少cookie的问题,但这会带来非常糟糕的安全隐患。