Spring Security:自定义UserDetails和GrandtedAuthority实现

时间:2019-04-01 07:54:09

标签: spring authentication spring-security

我已经配置了以下身份验证管理器和内存用户服务

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider>
        <security:password-encoder ref="bcrypt" />
        <security:user-service id="userService">
            <!-- 1234 -->
            <security:user name="1" password="$2a$04$68Oq1PRWyHktgJ2E4Zs9reakETagh81UGEe/QF4V1FJo9kfVBvNHq" authorities="ROLE_1" />
            <security:user name="2" password="$2a$04$68Oq1PRWyHktgJ2E4Zs9reakETagh81UGEe/QF4V1FJo9kfVBvNHq" authorities="ROLE_2" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

如何为Spring提供自定义的UserDetailsGrandtedAuthority实现,以便在身份验证机制期间填充Authentication对象。

1 个答案:

答案 0 :(得分:0)

您创建实现UserDetailsService的bean并将其连接到身份验证提供者:

<bean id="myUserDetailsService" class="org.example.MyUserDetailsService"/>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider user-service-ref="myUserDetailsService">
      <!-- ... -->
    </security:authentication-provider>
</security:authentication-manager>

在实现UserDetailsService时,您将覆盖loadUserByUsername()方法。

如果您不想创建自定义用户类,则org.springframework.security.core.userdetails包含一个基本的User类。您会注意到,构造函数可以选择传递GrantedAuthority的集合。基本实现是org.springframework.security.core.authority.SimpleGrantedAuthority