認證服務
這將建立 Spring Security 的 ProviderManager
類的一個例項,需要使用一個或多個 AuthenticationProvider
例項列表進行配置。這些例項可以透過名稱空間提供的語法元素建立,也可以是標準的 bean 定義,使用 authentication-provider
元素標記新增到列表中。
<authentication-manager>
每個使用名稱空間的 Spring Security 應用都必須在某處包含此元素。它負責註冊為應用提供認證服務的 AuthenticationManager
。所有建立 AuthenticationProvider
例項的元素都應該是此元素的子元素。
<authentication-manager> 屬性
-
alias 此屬性允許您為內部例項定義一個別名,供您自己的配置使用。
-
erase-credentials 如果設定為 true,一旦使用者透過認證,AuthenticationManager 將嘗試清除返回的 Authentication 物件中的任何憑據資料。實際上,它對映到
ProviderManager
的eraseCredentialsAfterAuthentication
屬性。
-
observation-registry-ref 指向用於
FilterChain
和相關元件的ObservationRegistry
的引用
-
id 此屬性允許您為內部例項定義一個 id,供您自己的配置使用。它與 alias 元素相同,但與使用 id 屬性的元素提供了更一致的體驗。
<authentication-provider>
除非與 ref
屬性一起使用,否則此元素是配置 DaoAuthenticationProvider
的簡寫。DaoAuthenticationProvider
從 UserDetailsService
載入使用者資訊,並將使用者名稱/密碼組合與登入時提供的值進行比較。UserDetailsService
例項可以透過使用可用的名稱空間元素(jdbc-user-service
)定義,或者透過使用 user-service-ref
屬性指向應用上下文中其他地方定義的 bean 來定義。
<authentication-provider> 屬性
-
ref 定義對實現
AuthenticationProvider
的 Spring bean 的引用。
如果您編寫了自己的 AuthenticationProvider
實現(或者出於某種原因想將 Spring Security 自己的實現之一配置為傳統 bean),那麼您可以使用以下語法將其新增到 ProviderManager
的內部列表中
<security:authentication-manager>
<security:authentication-provider ref="myAuthenticationProvider" />
</security:authentication-manager>
<bean id="myAuthenticationProvider" class="com.something.MyAuthenticationProvider"/>
-
user-service-ref 指向一個實現 UserDetailsService 的 bean 的引用,該 bean 可以使用標準的 bean 元素或自定義的 user-service 元素建立。
<jdbc-user-service>
建立一個基於 JDBC 的 UserDetailsService。
<jdbc-user-service> 屬性
預設值是
select username, authority from authorities where username = ?
-
cache-ref 定義與 UserDetailsService 一起使用的快取引用。
-
data-source-ref 提供所需表的 DataSource 的 bean ID。
-
id 一個 bean 識別符號,用於在上下文中的其他地方引用該 bean。
-
role-prefix 一個非空字串字首,將新增到從持久化儲存載入的角色字串中(預設為 "ROLE_")。如果預設值非空,可以使用值 "none" 表示沒有字首。
-
users-by-username-query 查詢使用者名稱、密碼和啟用狀態的 SQL 語句,給定使用者名稱。預設值是
select username, password, enabled from users where username = ?
<password-encoder>
認證提供程式可以選擇配置使用密碼編碼器,如 密碼儲存 部分所述。這將導致該 bean 被注入適當的 PasswordEncoder
例項。