身份验证服务

这将创建一个 Spring Security 的 ProviderManager 类的实例,该实例需要配置一个或多个 AuthenticationProvider 实例的列表。这些实例可以使用命名空间提供的语法元素创建,也可以是标准的 bean 定义,使用 authentication-provider 元素标记为添加到列表中。

<authentication-manager>

每个使用命名空间的 Spring Security 应用程序都必须在某个地方包含此元素。它负责注册 AuthenticationManager,该管理器为应用程序提供身份验证服务。所有创建 AuthenticationProvider 实例的元素都应该是此元素的子元素。

<authentication-manager> 属性

  • alias 此属性允许您为内部实例定义别名,以便在您自己的配置中使用。

  • erase-credentials 如果设置为 true,则 AuthenticationManager 将尝试清除返回的 Authentication 对象中的任何凭据数据,一旦用户经过身份验证。从字面上看,它映射到 ProviderManagereraseCredentialsAfterAuthentication 属性。

  • observation-registry-ref 对用于 FilterChain 和相关组件的 ObservationRegistry 的引用。

  • id 此属性允许您为内部实例定义一个 id,以便在您自己的配置中使用。它与别名元素相同,但为使用 id 属性的元素提供了更一致的体验。

<authentication-manager> 的子元素

<authentication-provider>

除非与 ref 属性一起使用,否则此元素是配置 DaoAuthenticationProvider 的简写。DaoAuthenticationProviderUserDetailsService 加载用户信息,并将用户名/密码组合与登录时提供的用户名/密码组合进行比较。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 元素或自定义 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>

身份验证提供程序可以选择配置为使用密码编码器,如 密码存储 中所述。这将导致 bean 被注入适当的 PasswordEncoder 实例。

<password-encoder> 的父元素

<password-encoder> 属性

  • hash 定义对用户密码使用的哈希算法。我们强烈建议不要使用 MD4,因为它是一种非常弱的哈希算法。

  • ref 定义对实现 PasswordEncoder 的 Spring bean 的引用。

<user-service>

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

<user-service> 属性

  • id bean 标识符,用于在上下文中其他地方引用 bean。

  • 属性 属性文件的位置,其中每行都采用以下格式:

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

<user-service> 的子元素

<user>

表示应用程序中的用户。

<user> 的父元素

<user> 属性

  • 权限 授予用户的多个权限之一。用逗号分隔权限(但不要加空格)。例如,“ROLE_USER,ROLE_ADMINISTRATOR”

  • 禁用 可以设置为“true”以将帐户标记为禁用且不可用。

  • 锁定 可以设置为“true”以将帐户标记为锁定且不可用。

  • 名称 分配给用户的用户名。

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