2017-04-22 207 views
1

我有兩個彈簧啓動應用程序。在同一時間使用兩個彈簧啓動應用程序時退出一個彈簧應用程序

  • 模塊1端口上運行端口運行8080
  • 模塊2 9090

我已經使用這個屬性設置的端口application.properties文件

server.port=${port:9090} 

兩個模塊有/登錄,/註冊這些都可以通過下面的代碼無需認證即可訪問。

http.authorizeRequests() 
      .antMatchers("/signup", "/login").permitAll() 

任何其他請求都要求用戶進行身份驗證。

如果我使用一個模塊在沒有問題時,

但是,如果試圖在同一時間使用它們來回那麼問題是,我需要再次登錄到每一次之前的應用我使用另一個。例如,

  1. 轉到登錄頁面到Module - (頁眉響應已設置JSESSIONID = XX)OK
  2. 登錄到Module 1 - 確定
  3. 瀏覽受保護的內容在模塊1 - OK
  4. 轉到註冊頁面上的模塊2 - (標頭響應已設置JSESSIONID = YY)確定
  5. 嘗試瀏覽到模塊1的另一個安全內容 - 我需要再次登錄

我敢肯定這是d對於由module2重置的jessionid。

Are HTTP cookies port specific? 我讀過這篇文章,指出cookie不是端口特定的。

但必須有一個解決方案,以便我不必每次登錄時都要登錄應用程序。

+1

地圖應用程序以不同的上下文路徑,所以JSESSIONID餅乾將是獨立的;否則,Cookie是針對相同的上下文的,所以實際上這兩個應用程序都有一個cookie。另一種解決方案是使用不同的主機。 –

+0

@dur它的本地主機:8080 /和本地主機:9090/ – user2049132

+0

@RomanPuchkovskiy並使用不同的contextpaths真正解決問題?因爲在我發佈的鏈接,它說,Cookie是在域級別(我指定的。e本地主機) – user2049132

回答

5

您需要爲兩個應用程序使用不同的cookie名稱。

有不同的方法可以做到這些,最簡單的一種,與版本> = 1.3彈簧啓動應用程序只是設置一個屬性:

server.session.cookie.name = MYSESSIONID 

其他方式在這個post描述。

+0

@dur,你是對的,更改cookie路徑也是一個選項 –

1

將您的應用程序映射到不同的上下文路徑,因此JSESSIONID Cookie將是獨立的;否則,Cookie是針對相同的上下文的,所以實際上這兩個應用程序都有一個cookie。另一種解決方案是使用不同的主機。

請注意,您不僅在此更改Cookie的上下文路徑:如果更改應用程序的上下文路徑,Servlet API實現將爲您處理Cookie上下文路徑更改。

我已經嘗試了一點相同的主機和不同的上下文路徑。

我目前有兩個應用程序啓動,都以Servlet API爲基礎(並且JSESSIONID cookie由Servlet API的會話機制定義)。這些應用程序都在本地主機上,不同端口上運行,並且具有不同的上下文(/ app1和/ app2)。我登錄到兩個應用程序,並在Chrome的對話框,其中列出餅乾我可以看到兩個JSESSIONID餅乾:一個用於localhost/app1,另一個用於localhost/app2

然後我登出/ app2。它的JSESSIONID被銷燬並用不同的內容重新創建(因爲我已被重定向到登錄頁面)。 (請注意,爲了看到這一變化,我不得不關閉Cookies對話框並重新打開它,因爲Chrome並沒有實時更新它)。同時,屬於/ app1的JSESSIONID cookie完好無損,我可以在/ app1中繼續工作(所以我沒有從中註銷)。

UPDATE

還有一個實驗。我已經在同一個上下文中映射了兩個應用程序(/ app1)。他們在localhost:8084和localhost:8085上運行。我做到以下幾點:

  1. 我登錄到第一個應用程序(端口8084)
  2. 我登錄到第二個應用程序(8085端口)
  3. 我切換回第一個應用程序選項卡,單擊任何鏈接,看到會話被破壞(因爲我被重定向到登錄頁面)。

因此,即使應用程序在具有相同上下文路徑的同一主機的不同端口上運行,它們也使用相同的cookie。基本上,這是在Are HTTP cookies port specific?說:Cookies不會通過端口提供隔離

一個小總結:

  1. 不同主機:沒問題,餅乾不同
  2. 不同的應用環境:無問題,餅乾不同
  3. 相同的主機,相同的應用程序上下文,不同的端口:只有一個cookie的,這將導致衝突。

所以配方和以前一樣:

  1. 或者使用不同的主機(即主機名,不包括港口)
  2. 或者使用不同的上下文路徑
  3. 或(如其他回答提示)改變cookie的名稱,以避免衝突
+0

這是一個很好的解決方案,用於在同一端口上運行的應用程序 – user2049132

相關問題