1. 什么是 Spring Security 的 UserDetails

Spring Security 的 UserDetails 是 Spring Security 框架中的一个核心接口,它提供了一种简单的方式来存储用户的身份信息和授权信息。它有一个实现类,叫做 User。UserDetails 接口定义了以下方法:

123456public interface UserDetails {
    String getUsername();
    String getPassword();
    boolean isAccountNonExpired();
    boolean isAccountNonLocked();
    boolean isCredentialsNonExpired();
    boolean isEnabled();
    Collection getAuthorities();
}
Java

2. 如何使用 UserDetails

使用 UserDetails 的第一步是创建一个实现 UserDetails 接口的类,并实现接口中定义的方法。这个类中需要包含用户的身份信息,比如用户名、密码、账户是否有效等。

第二步是实现一个 UserDetailsService 接口,该接口定义了一个 loadUserByUsername() 方法,该方法接收一个用户名作为参数,返回一个 UserDetails 对象,该对象包含了该用户的所有信息:

12public interface UserDetailsService {
    UserDetails loadUserByUsername(String username);
}
Java

3. 如何配置 UserDetails

最后一步是将 UserDetailsService 配置到 Spring Security 中,可以在 Spring Security 的配置文件中添加以下代码:

123@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;
 
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }
}
Java

这样,就可以使用 UserDetails 实现用户信息的存储和授权了。