美文网首页
【已解决】请教大神关于Spirng-Security的问题

【已解决】请教大神关于Spirng-Security的问题

作者: JayMeWangGL | 来源:发表于2020-01-29 17:50 被阅读0次

原因是因为存储在数据库中的密码并未经过加密处理,如果经过加密后的存入数据库,则直接使用userInfo.getPassword()即可直接使用

猜想:{noop}是使用明文保存的密码,但是验证权限时会出错(因为在Spring-Security中开启了密码加密导致的出错)

如果在password前添加"{noop}"便会报错

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserInfo userInfo=null;
        try {
             userInfo= userDao.findByUsername(username);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //将自己的信息封装成UserDetails对象
        User user = new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getAuthority());
        return user;
    }

报错如下(使用bcrypt加密):

BadCredentialsException: Bad credentials


如果在UserService中使用BCryptPasswordEncoder对密码进行封装就能顺利完成权限匹配进入系统:

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserInfo userInfo=null;
        try {
             userInfo= userDao.findByUsername(username);
        } catch (Exception e) {
            e.printStackTrace();
        }
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        String password = bCryptPasswordEncoder.encode(userInfo.getPassword());
        //将自己的信息封装成UserDetails对象
        User user = new User(userInfo.getUsername(),password,getAuthority());
        return user;
    }

相关文章

网友评论

      本文标题:【已解决】请教大神关于Spirng-Security的问题

      本文链接:https://www.haomeiwen.com/subject/khzpthtx.html