身份验证服务
这将创建一个 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 元素或自定义 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>
身份验证提供程序可以选择配置为使用密码编码器,如密码存储中所述。这将导致将适当的PasswordEncoder
实例注入到 bean 中。