2014-10-10 130 views
4

我是Spring Security的新手,我試圖實現自定義UserDetailsService進行身份驗證。令我困擾的是,這個接口只包含一個方法loadUserByUsername(String username),它只接受用戶名作爲參數並返回UserDetailsSpring Security和UserDetailsS​​ervice

我想知道爲什麼這個方法沒有把任何密碼作爲參數。

Spring如何設法僅基於用戶名對用戶進行身份驗證?

我是Spring的新手,並且歡迎任何有關Api和Spring Security身份驗證過程的說明。

回答

6

驗證用戶不是UserDetailsService的工作。這是AuthenticationProvider的責任。

例如,DaoAuthenticationProvider只是使用UserDetailsService通過用戶名加載用戶,然後根據該用戶驗證UsernamePasswordAuthenticationToken以查看密碼是否匹配。

看看DaoAuthenticationProvider的源代碼,以瞭解它是如何在幕後完成的。

+0

如果我將用戶存儲在數據庫中,是否必須提供AuthenticationProvider? – Dimitri 2014-10-10 10:57:52

+0

是的,如果你想使用自定義的UserDetailsS​​ervice。查看這個答案,瞭解如何使用您的自定義UserDetailsS​​ervice設置身份驗證管理器的詳細信息:http://stackoverflow.com/questions/26285609/implement-custom-spring-security-authentication-method/26286180#26286180 – 2014-10-10 11:01:59

+0

UserDetailsS​​ercvice是用於授權用戶並根據需要從Ldap/DB加載用戶信息。 如果你想驗證用戶對數據庫,那麼你可以編寫自己的自定義'AuthenticationProvider'並重寫'authenticate()'方法 – Neeraj 2014-10-10 11:22:57

相關問題