認證服務

這將建立 Spring Security 的 ProviderManager 類的一個例項,需要使用一個或多個 AuthenticationProvider 例項列表進行配置。這些例項可以透過名稱空間提供的語法元素建立,也可以是標準的 bean 定義,使用 authentication-provider 元素標記新增到列表中。

<authentication-manager>

每個使用名稱空間的 Spring Security 應用都必須在某處包含此元素。它負責註冊為應用提供認證服務的 AuthenticationManager。所有建立 AuthenticationProvider 例項的元素都應該是此元素的子元素。

<authentication-manager> 屬性

  • alias 此屬性允許您為內部例項定義一個別名,供您自己的配置使用。

  • erase-credentials 如果設定為 true,一旦使用者透過認證,AuthenticationManager 將嘗試清除返回的 Authentication 物件中的任何憑據資料。實際上,它對映到 ProviderManagereraseCredentialsAfterAuthentication 屬性。

  • observation-registry-ref 指向用於 FilterChain 和相關元件的 ObservationRegistry 的引用

  • id 此屬性允許您為內部例項定義一個 id,供您自己的配置使用。它與 alias 元素相同,但與使用 id 屬性的元素提供了更一致的體驗。

<authentication-manager> 的子元素

<authentication-provider>

除非與 ref 屬性一起使用,否則此元素是配置 DaoAuthenticationProvider 的簡寫。DaoAuthenticationProviderUserDetailsService 載入使用者資訊,並將使用者名稱/密碼組合與登入時提供的值進行比較。UserDetailsService 例項可以透過使用可用的名稱空間元素(jdbc-user-service)定義,或者透過使用 user-service-ref 屬性指向應用上下文中其他地方定義的 bean 來定義。

<authentication-provider> 的父元素

<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 元素建立。

<authentication-provider> 的子元素

<jdbc-user-service>

建立一個基於 JDBC 的 UserDetailsService。

<jdbc-user-service> 屬性

  • authorities-by-username-query 查詢使用者授予許可權的 SQL 語句,給定使用者名稱。

預設值是

select username, authority from authorities where username = ?
  • cache-ref 定義與 UserDetailsService 一起使用的快取引用。

  • data-source-ref 提供所需表的 DataSource 的 bean ID。

  • group-authorities-by-username-query 查詢使用者組許可權的 SQL 語句,給定使用者名稱。預設值是

    select
    g.id, g.group_name, ga.authority
    from
    groups g, group_members gm, group_authorities ga
    where
    gm.username = ? and g.id = ga.group_id and g.id = gm.group_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 例項。

<password-encoder> 的父元素

<password-encoder> 屬性

  • hash 定義用於使用者密碼的雜湊演算法。我們強烈建議不要使用 MD4,因為它是一種非常弱的雜湊演算法。

  • ref 定義對實現 PasswordEncoder 的 Spring bean 的引用。

<user-service>

從屬性檔案或一組 "user" 子元素建立一個記憶體中的 UserDetailsService。使用者名稱在內部被轉換為小寫以支援不區分大小寫的查詢,因此如果需要區分大小寫,則不應使用此功能。

<user-service> 屬性

  • id 一個 bean 識別符號,用於在上下文中的其他地方引用該 bean。

  • properties 屬性檔案的位置,每行格式為

    username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]

<user-service> 的子元素

<user>

代表應用中的一個使用者。

<user> 的父元素

<user> 屬性

  • authorities 授予使用者的一個或多個許可權。使用逗號分隔許可權(但不要加空格)。例如,"ROLE_USER,ROLE_ADMINISTRATOR"

  • disabled 可以設定為 "true",將賬戶標記為停用且不可用。

  • locked 可以設定為 "true",將賬戶標記為鎖定且不可用。

  • name 分配給使用者的使用者名稱。

  • password 分配給使用者的密碼。如果對應的認證提供程式支援雜湊(請記住設定 "user-service" 元素的 "hash" 屬性),則此密碼可以進行雜湊處理。如果資料僅用於訪問許可權而不用於認證,則可以省略此屬性。如果省略,名稱空間將生成一個隨機值,防止其被意外用於認證。不能為空。