文章目录
需求
- 实现多用户访问
- 从指定数据源中检索用户数据。
- 使用自定义的登陆页面。
思路
从Spring Security : 用户名密码认证中的时序图可以发现:Spring Security已经实现了完整的用户名密码认证的逻辑。因此只要DaoAuthenticationProvider#retrieveUser()方法返回的UserDetails实例是从指定数据源中检索到的,那么就可以实现“从指定数据源检索用户数据”的需求。当“指定数据源”中的存在多个用户时,同时会实现“多用户访问”。
实现
模型
自定义用户对象 MyUser
org.springframework.security.core.userdetails.User 是Spring Security已实现的UserDetails实现。继承该类。
public class MyUser extends User {
public MyUser(String username, String password, Collection<? extends GrantedAuthority> authorities) {
super(username, password, authorities);
}
public MyUser(String username,
String password,
boolean enabled,
boolean accountNonExpired,
boolean credentialsNonExpired,
boolean accountNonLocked,
Collection<? extends GrantedAuthority> authorities) {
super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
}
}
数据源
模拟数据源 RepositoryUtils
模拟数据源,数据源中保存用户及权限信息
public class RepositoryUtils {
static List<MyUser> users = new ArrayList<>();
static {
//密码加密工具
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(4);
//创建用户并设置用户角色
ArrayList<SimpleGrantedAuthority> userAuth = new ArrayList<>();
userAuth.add(new SimpleGrantedAuthority("MEMBER"));
users