认证服务
这将创建 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
实例。