之前我们已经自定义了认证的规则,并且实现了用户的登录,跳转到了首页
但是有一个问题,那就是我想要在首页显示用户名,也就是不同的人登录以后,首页就显示不同人的名字,数据库现在有3个人,每个人的状态也是不一样的,1 代表可以使用这个用户进行登录,0 代表这个用户不能使用了,表示删除了。
现在想要实现的就是
有的用户可以登录,有的不可以,并且首页显示登录用户的名字
实现有的用户可以登录,有的不可以
这个就在代码里面判断用户在数据库里面的status的字段。
我们因为已经自定义了登录的认证,所以在自定义的登录认证的代码里面要判断这个status的字段
也就是在这个代码里面判断
里面如何修改成我们要的结果呢?
我们之前说过,我们在自定义的认证规则里面,返回的对象是springsecurity框架自己的。
UserDetails这个接口,他有实现类user
我们看这个user的实现类有两个,一个是参数有3个,一个是有多个。之前我们写的认证规则一直是使用的3个的参数,现在因为要判断status的这个字段,所以现在要用多个参数的实现类
user对象的多参数的源码为
可以看到,这个构造方法里多了四个布尔类型的构造参数,其实我们使用的三个构造参数的构造方法里这四个布尔
值默认都被赋值为了true,那么这四个布尔值到底是何意思呢?
boolean enabled 是否可用
boolean accountNonExpired 账户是否失效
boolean credentialsNonExpired 秘密是否失效
boolean accountNonLocked 账户是否锁定
只有以上的4个都为true,这个用户才可以登录
现在要判断
只要将从数据库查出来的status的字段,放到enabled这个参数上面就可以
修改后的自定义的认证规则的全部的源码
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try {
//根据用户名做查询
SysUser sysUser = userDao.findByName(username);
if(sysUser==null){
return null;
}
List<SimpleGrantedAuthority> authorities = new ArrayList<>();
List<SysRole> roles = sysUser.getRoles();
for (SysRole role : roles) {
authorities.add(new SimpleGrantedAuthority(role.getRoleName()));
}
//{noop}后面的密码,springsecurity会认为是原文。
UserDetails userDetails = new User(sysUser.getUsername(),
sysUser.getPassword(),
sysUser.getStatus()==1,
true,
true,
true,
authorities);
return userDetails;
}catch (Exception e){
e.printStackTrace();
//认证失败!
return null;
}
}
记住,以上的数据库里面的用户要有权限,就是配置里面的权限
以上就实现了有的用户可以登录,有的不可以

京公网安备 11010502036488号