对于最新的稳定版本,请使用 Spring Security 7.0.4spring-doc.cadn.net.cn

认证服务

这创建了Spring Security的ProviderManager类的一个实例,该实例需要配置一个包含一个或多个AuthenticationProvider实例的列表。 这些提供者可以使用命名空间提供的语法元素进行创建,也可以是标准的bean定义,并通过authentication-provider元素标记为添加到列表中。spring-doc.cadn.net.cn

<authentication-manager>

每个使用命名空间的Spring Security应用程序都必须在某个地方包含这个元素。它负责注册提供身份验证服务给应用的AuthenticationManager。所有创建AuthenticationProvider实例的所有元素都应该作为该元素的子元素。spring-doc.cadn.net.cn

<authentication-manager> 属性

  • 别名 此属性允许您定义内部实例的别名名称,以便在您的配置中使用。spring-doc.cadn.net.cn

  • 擦除凭据 如果设置为 true,AuthenticationManager 将在用户通过身份验证后,尝试清除返回的 Authentication 对象中的任何凭据数据。 字面上,它映射到 eraseCredentialsAfterAuthentication 属性,该属性属于 ProviderManagerspring-doc.cadn.net.cn

  • observation-registry-ref 一个对用于ObservationRegistry及相关组件的FilterChain的引用spring-doc.cadn.net.cn

<authentication-provider>

除非使用了ref属性,否则该元素是配置DaoAuthenticationProvider的快捷方式。
DaoAuthenticationProviderUserDetailsService加载用户信息,并将用户名/密码组合与登录时提供的值进行比较。
UserDetailsService实例可以通过使用可用命名空间元素(jdbc-user-service)定义,或者通过使用user-service-ref属性来指向应用上下文中其他地方定义的bean。spring-doc.cadn.net.cn

<authentication-provider>的父元素

<authentication-provider> 属性

  • ref 定义了一个引用Spring Bean的元素,该Bean实现了AuthenticationProvider接口。spring-doc.cadn.net.cn

如果您已经编写了自己的AuthenticationProvider实现(或者出于某些原因需要将Spring Security自身实现之一作为传统bean进行配置),那么您可以使用以下语法将其添加到内部ProviderManager的列表中:spring-doc.cadn.net.cn

<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元素来创建。spring-doc.cadn.net.cn

<jdbc-user-service>

基于JDBC的UserDetailsService的创建。spring-doc.cadn.net.cn

<jdbc-user-service> 属性

  • 根据用户名查询的权限查询语句 一个用于根据用户名查询用户授予权限的SQL语句。spring-doc.cadn.net.cn

The default isspring-doc.cadn.net.cn

select username, authority from authorities where username = ?
  • 根据用户名查询用户组权限的SQL语句
    一种用于根据用户名查询用户组权限的SQL语句。默认值是spring-doc.cadn.net.cn

    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
  • 角色前缀
    一个非空字符串前缀,将在从持久存储加载的角色字符串前添加该前缀(默认值为 "ROLE_")。
    在默认值是非空的情况下,使用 "none" 以去掉前缀。spring-doc.cadn.net.cn

  • users-by-username-query 一个用于根据用户名查询用户名、密码和启用状态的SQL语句。默认值是spring-doc.cadn.net.cn

    select username, password, enabled from users where username = ?

<password-encoder>

认证提供商可以选配使用密码编码器,如文档中xref page部分所述。 这将导致容器注入适当的 ../../../features/authentication/password-storage.html#authentication-password-storage 实例。spring-doc.cadn.net.cn

<password-encoder> 属性

  • 哈希 定义用于用户密码的散列算法。我们强烈建议不要使用MD4,因为它是一个非常弱的散列算法。spring-doc.cadn.net.cn

  • ref 定义了一个引用Spring Bean的元素,该Bean实现了PasswordEncoder接口。spring-doc.cadn.net.cn

<user-service>

创建一个从属性文件或“user”子元素列表中生成的内存中的UserDetailsService。 用户名在内部转换为小写以允许不区分大小写的查找,因此如果需要区分大小写,则不应使用此方法。spring-doc.cadn.net.cn

<user-service> 属性

  • 属性文件
    每个行的格式为spring-doc.cadn.net.cn

    username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]

<user-service>的子元素

<user>

表示应用程序中的用户。spring-doc.cadn.net.cn

<user> 属性

  • 权限
    一个或多个授予用户的权限。使用逗号分隔(但不要留空格)。例如,"ROLE_USER,ROLE_ADMINISTRATOR"spring-doc.cadn.net.cn

  • 密码 该用户分配的密码。 如果相应的认证提供者支持哈希,则此值可能会被哈希化(请记得设置“user-service”元素的“hash”属性)。 如果数据仅用于访问权限而非认证,则可以省略此属性。 如果省略,命名空间将生成一个随机值,防止其意外用于认证。 不能为空。spring-doc.cadn.net.cn