2016-08-22 82 views
0

我需要爲我的Spring Security的實現UserDetailsService提供一個可選的附加參數。Spring Security - 如何爲UserDetailsS​​ervice提供附加參數

作爲一個簡單的例子,假設我需要爲屬於用戶的寵物傳遞寵物ID。

並非所有用戶都有寵物,但如果他們這樣做,我的Person類實現UserDetails有一個寵物,需要登錄時檢索。

這是我試過到目前爲止:

How to pass an additional parameter with spring security login page

與接受答案的問題是,它覺得這是錯/漏了UserDetailsService實施夫婦在HttpRequestHttpSession意識。

其他方法我已經看了定製涉及AuthenticationDetailsAuthenticationDetailsSource,但這種感覺也錯,因爲UserDetailsService似乎應該負責一個單一的東西(裝載用戶詳細信息),以及寵物將是那些部分用戶詳情。

我知道我可以得到這些方法之一工作,但他們不覺得乾淨。有沒有人想出解決這個問題的好方法?不尋找任何人爲我寫代碼,只是尋找一個通用的方法。

非常感謝!

回答

1

我認爲可能對UserDetails的目的有誤解。查看Javadoc UserDetails是關於用戶與應用程序/系統安全設備的關係。如方法摘要所示; getPassword,getUsername,getAuthorities等,本質上是誰(authC)以及他們可以做什麼(authZ)。加載用戶的寵物信息將更多的是商業問題,應該在一個單獨的服務PetService.doesUserHavePet(User)PerService.loadPet(User)中處理,而不是在您的UseDetailsS​​ervice實現中進行處理,該應用程序應該加載用戶信息您的組織目錄服務和/或用戶存儲。我認爲你找到每種方法都不那麼幹淨的原因是你正在試圖將兩個概念/職責合併到一個類中。

相關問題