2011-06-20 130 views
3

當用戶試圖根據用戶名登錄時,我需要做一些自定義的事情,但這些事情需要在認證過程之前發生。這是迄今爲止我所擁有的。用spring-security-core連接預認證

我們的系統允許多個電子郵件地址,客戶端希望用戶能夠使用其中的任何一個進行身份驗證。爲了做到這一點,我創建了一個自定義的UserDetailsS​​ervice,並讓代碼適當地查找用戶。

我需要做的其他事情需要在spring-security並不真正瞭解或關心的用戶對象上使用幾個標誌。但我需要掛鉤auth進程,檢查這些標誌,並將適當的錯誤消息返回給用戶。舉一個更具體的例子,我需要知道這是用戶第一次登錄系統。所以我們在用戶上有一個標誌來跟蹤這個。當用戶嘗試進行身份驗證時,我需要讀取此值並執行一些操作,包括向用戶發送消息並暫停身份驗證。

我查看了文檔中的事件監聽器機制,但是我沒有看到如何做的是如何通過監聽器注入我自己的工作流。我需要做這樣一個流程:

驗證與有效的電子郵件,但第一次 - >取消認證 - >登錄頁面上顯示的消息

我想如果我可以得到一個場景處理,我可以計算的別人出於我的需要。

更新:我讀的過濾器現在,看看我是否錯過了什麼......

+0

IM驚訝,這不是在grails春季安全文檔 – hvgotcodes

+0

你在春季安全文檔看?他們有一些樣本可能會很容易地與Grails插件一起工作 – hvgotcodes

+0

你有一個特定的鏈接,以節省我一些時間摸索他們? – Gregg

回答

4

最簡單的是掛接到認證過程是提供自己的AuthenticationProvider。只有兩種方法可以實施。在authenticate()你可以做你所有的自定義的東西。

要配置供應商到框架中做這樣的事情:

<authentication-manager> 
    <authentication-provider ref="myAuthenticationProvider" /> 
</authentication-manager> 
+1

您可能想要擴展AbstractUserDetailsAuthenticationProvider:http://static.springsource.org/spring-security/site/apidocs/org/springframework/security/authentication/dao/AbstractUserDetailsAuthenticationProvider.html – Owen

+0

很棒的建議! – sourcedelica

+0

已經朝着這個方向前進。 :O)。謝謝。我認爲這是正確的做法。一旦我全力以赴,我會回覆更多細節。 – Gregg