认证服务(Authentication Service)
本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。 |
在 Spring Security 3.0 之前,AuthenticationManager
是在内部自动注册的。现在你必须使用 <authentication-manager>
元素明确地注册一个。这将创建一 个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
属性来指向在 application context 中定义的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> 属性
一个SQL语句,用于查询一个用户的授予权限,给定一个用户名。
默认的是:
select username, authority from authorities where username = ?
-
cache-ref 定义一个对缓存的引用,以便与
UserDetailsService
一起使用。
-
data-source-ref 提供所需表的数据源的Bean ID。
-
id 一个Bean标识符,用于在 context 中引用该Bean的其他地方。
-
role-prefix 一个非空的字符串前缀,将被添加到从持久性存储加载的角色字符串中(默认为 "ROLE_")。在默认值为非空的情况下,使用值 "none" 表示没有前缀。
-
users-by-username-query 一个SQL语句,用于查询用户名、密码和启用状态,给定一个用户名。默认是
select username, password, enabled from users where username = ?
<password-encoder>
认证提供者可以选择性地配置为使用密码编码器,如 密码存储 中所述。这将导致Bean被注入适当的 PasswordEncoder
实例。
<user-service>
从一个 properties 文件或一个 "user" 子元素的列表中创建一个内存中的 UserDetailsService
。用户名在内部被转换为小写字母,以便进行不区分大小写的查找,所以如果需要区分大小写,就不应该使用这个。
<user-service> 属性
-
id 一个Bean标识符,用于在 context 中引用该Bean的其他地方。
-
properties 一个 Properties 文件的位置,其中每一行的格式为
username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]