Authentication Services
这将创建一个 Spring Security ProviderManager
类实例,该实例需要配置一个或多个 AuthenticationProvider
实例的列表。可以使用名称空间提供的语法元素创建这些实例,也可以是标准 Bean 定义,使用 authentication-provider
元素标记为添加到列表中。
<authentication-manager>
使用名称空间的每个 Spring Security 应用程序都必须在某处包含此元素。它负责注册为应用程序提供身份验证服务的 AuthenticationManager
。创建 AuthenticationProvider
实例的所有元素都应该是该元素的子元素。
<authentication-manager> Attributes
-
*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> Attributes
-
*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 元素或自定义用户服务元素创建。
<jdbc-user-service>
导致基于 JDBC 的 UserDetailsService 创建。
<jdbc-user-service> Attributes
默认值为
select username, authority from authorities where username = ?
-
*cache-ref*定义与 UserDetailsService 一起使用的缓存的引用。
-
*data-source-ref*提供所需表的 DataSource 的 Bean ID。
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 语句。默认值为:[source]
select username, password, enabled from users where username = ?
<password-encoder>
可以根据 Password Storage 中的说明,将身份验证提供程序配置为使用密码编码器。这将导致 Bean 被注入适当的 PasswordEncoder
实例。