簡體   English   中英

Spring Security為什么注銷用戶?

[英]Why does spring security log out the user?

我可以使用jsp,servlet和公用數據存儲(休眠)通過HTTP在不同端口號上的碼頭上啟動2個項目。 其中一個項目是“公共”網站(端口8080),另一個項目是“管理網站”(端口8899),其中管理網站使用spring security進行登錄/注銷。 但是,當我從不使用Spring Security的公共Web(端口8080)插入內容時,帶有Spring Security的端口8899的會話中斷了,我注銷了,必須再次登錄才能從公共Web上查看更新。端口8080。這兩個項目在maven jetty插件配置中具有相同的上下文(“ / foo”),但是在不同的端口上,因此行為有些出乎意料。 如果我使用2個不同的上下文,例如端口8080上的/ foo和端口8899上的/ zar,那么spring安全會話將持續存在。 是否有某些原因導致配置的不同端口無法具有相同的上下文,或者其他原因解釋了為什么用戶在數據庫插入另一個項目的另一個端口號后注銷用戶?

為什么配置對於不同的端口不能具有相同的上下文,是否有某些原因

是。 Cookie標准規定,不同端口上的服務計為同一來源。 不幸的是,它與JavaScript相同原產地政策不同,幾乎從來都不是您想要的,但是我們現在堅持使用它。

因此,如果您在端口8080服務上設置了JSESSIONID cookie,它將覆蓋端口8999服務設置的所有先前的JSESSIONID cookie。 當您返回8999服務時,由8080服務生成的cookie是未知的,因此您不會被識別為已登錄。

解決方法包括:

  1. 使用不同的路徑;
  2. 覆蓋默認的會話ID cookie名稱,以便每個應用程序具有不同的cookie( <session-config><cookie-config><name> );
  3. 在應用之間手動共享會話(例如,在Tomcat中使用crossContext="true" )。

我建議(2)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM