簡體   English   中英

如何使用Spring Security檢查用戶是否從另一個Web應用程序登錄

[英]how to check if a user is logged in from another webapp using spring security

我有以下設置。

server1:我在一個應用程序中使用spring security v3.1.4。 該應用程序正在其自己的服務器上運行(例如,server1.mydomain.com上的tomcat)。

server2:我在另一個服務器上運行了另一個第三方Web應用程序(例如,server2.mydomain.com上的tomcat)。 該應用程序是可插入的,因為它允許我安裝jar以在運行時動態修改行為。 其目的是提供內容。

用戶和資源訪問在server1上進行管理。 內容由server2交付。 在server2上,如果有資源請求進入,我需要詢問server1用戶是否已登錄。這可能與Spring安全性有關嗎? 我想我會隨資源請求一起傳遞用戶名(例如http://server2.mydomain.com?getFileId=1&username=johndoe@gmail.com )。

我在Spring Security網站上讀了一點,SSO似乎是要走的路(例如,使用中央身份驗證服務)。 但這似乎太過分了。 我們的架構已經有幾個服務器在運行。

  • 集成(例如,使用spring security的webapp)
  • 媒體(例如,第三方網絡應用)
  • 彈性搜索(集群)
  • mysql(集群)

如果可能的話,我們希望有一個極簡主義的系統(但考慮到我們使用rdbms / IR集群進行投資和假設,我們的系統並不小)。

任何幫助表示贊賞。

實現此目標的一種可能方法(盡管這不是我自己嘗試過的),可以通過一個簡單的基於REST的控制器在server1中公開Spring Security的SessionRegistry 然后,這將允許server2通過發出簡單的HTTP GET請求來遠程查詢server1中經過身份驗證的用戶。

可能值得閱讀Spring Security文檔的Session Management部分,以確定如何訪問SessionRegistry 我認為基本設置是在server1上配置的<http>部分內指定一個<session-management>標記。

<security:session-management>
    <security:concurrency-control session-registry-ref="sessionRegistry"/>
</security:session-management>

<bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl"/>

您還需要將偵聽器添加到server1的web.xml

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

然后,您可能需要在server1上創建的控制器可以與SessionRegistry自動SessionRegistry

@Autowired
private SessionRegistry sessionRegistry

從那里,您可以使用sessionRegistry.getAllSessions()確定在請求中傳遞給控制器​​的用戶名(主要用戶sessionRegistry.getAllSessions()是否已在server1上登錄。

不僅僅是一個具體的答案,而是更多的想法-但可能會為您提供探索的途徑。

暫無
暫無

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

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