之前我们已经自定义了认证的规则,并且实现了用户的登录,跳转到了首页

但是有一个问题,那就是我想要在首页显示用户名,也就是不同的人登录以后,首页就显示不同人的名字,数据库现在有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;
        }

    }

记住,以上的数据库里面的用户要有权限,就是配置里面的权限



以上就实现了有的用户可以登录,有的不可以