身份验证服务
这会创建 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-manager> 的子元素
<authentication-provider>
除非与 ref
属性一起使用,否则此元素是配置 DaoAuthenticationProvider
的简写。DaoAuthenticationProvider
从 UserDetailsService
加载用户信息,并将用户名/密码组合与登录时提供的值进行比较。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>
身份验证提供者可以选择配置为使用密码编码器,如密码存储中所述。这将导致相应的 PasswordEncoder
实例被注入到 bean 中。
<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" 属性)。在数据不用于身份验证而仅用于访问权限的情况下,可以省略此属性。如果省略,命名空间将生成一个随机值,以防止其意外用于身份验证。不能为空。