在快速入门中通过在application.yml
配置用户名和密码的方式初步了解如何应用Spring Security;但在实际应用中,通常需要从数据库中获取用户信息。
Spring Security中UserDetails相关类
UserDetails
来表示用户的核心信息:权限集,密码,用户名,账户是否过期,账户是否锁定,凭证是否过期,用户是否可用。在实际开发中,需要扩展UserDetails
来自定义存储更多的用户信息。UserDetailsService
是Spring Security加载用户数据的核心接口,提供了根据用户名查找用户的方法。UserDetailsManager
继承自UserDetailsService
,并提供了管理用户的方法。
扩展UserDetailsService
在UserDetailsService
接口中只声明了一个loadUserByUsername(String username)
方法,用于根据用户名查找用户的方法,返回UserDetails
。
public class CustomizeUserDetailsService implements UserDetailsService {
// 用于模拟从数据库查询
private final List<String> usernameList;
public CustomizeUserDetailsService(List<String> usernameList) {
this.usernameList = usernameList;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
if(!exists(username)) {
throw new UsernameNotFoundException("用户不存在");
}
// 此处的TEST表示用户的权限, {xxx}指定密码加密的方式, {noop}表示不加密,采用明文
return User