此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Security 6.4.1spring-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

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

  • id 此属性允许您为内部实例定义 id 以在您自己的配置中使用。 它与 alias 元素相同,但为使用 id 属性的元素提供更一致的体验。spring-doc.cadn.net.cn

<authentication-provider>

除非与ref属性,此元素是配置DaoAuthenticationProvider.DaoAuthenticationProviderUserDetailsService并将用户名/密码组合与 login 时提供的值进行比较。 这UserDetailsServiceinstance 可以通过使用可用的命名空间元素 (jdbc-user-service或使用user-service-ref属性指向应用程序上下文中其他位置定义的 bean)。spring-doc.cadn.net.cn

<authentication-provider> 的父元素

<authentication-provider> 属性

如果您编写了自己的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"/>
  • 用户服务引用对实现 UserDetailsService 的 Bean 的引用,该 Bean 可以使用标准 Bean 元素或自定义 user-service 元素创建。spring-doc.cadn.net.cn

<jdbc-用户服务>

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

<jdbc-user-service> 属性

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

select username, authority from authorities where username = ?
  • 按用户名查询的组权限一个 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-查询一个 SQL 语句,用于查询给定用户名的用户名、密码和启用状态。 默认值为spring-doc.cadn.net.cn

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

<密码编码器>

可以选择将身份验证提供程序配置为使用密码编码器,如 Password Storage 中所述。 这将导致 bean 被注入适当的PasswordEncoder实例。spring-doc.cadn.net.cn

<password-encoder> 属性

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

<用户服务>

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

<user-service> 属性

  • 性能Properties 文件的位置,其中每行的格式为spring-doc.cadn.net.cn

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

<user-service> 的子元素

<用户>

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

<user> 属性

  • 当局授予用户的多个权限之一。 用逗号分隔权限(但不能有空格)。 例如,“ROLE_USER,ROLE_ADMINISTRATOR”spring-doc.cadn.net.cn

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