![](/img/trans.png)
[英]How to get the role that a user logged in with in my controller using Spring Security
[英]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似乎是要走的路(例如,使用中央身份驗證服務)。 但這似乎太過分了。 我們的架構已經有幾個服務器在運行。
如果可能的話,我們希望有一個極簡主義的系統(但考慮到我們使用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.