Spring Security使用数据库认证及用户密码加密和解密功能

流程图:

Spring Security使用数据库认证及用户密码加密和解密功能_第1张图片

1.接上一篇博客https://mp.csdn.net/console/editor/html/104576494,准备好环境。

2.spring-security.xml中的配置:



  
  
  
  
  
  
  
  
  
  
    
    
    
    
    
    
    
    
    
    
    
    
  
  
  
  
    //userService是认证器需要定义出来
       
      
    
  
  
  
  
  
  
  
   

 3.定义一个IUserService继承UserDetailsService接口:

Spring Security使用数据库认证及用户密码加密和解密功能_第2张图片

在创建一个UserServiceImpl去实现IUserService接口,覆盖loadUserByUsername方法:

 @Service("userService")//这个名字必须与spring-security.xml中配置的认证器名字一样

public class UserServiceImpl implements IUserService {
  @Autowired
  private IUserDao userDao;
  @Autowired//当执行保存用户的时候对用户的密码进行加密
  private BCryptPasswordEncoder bCryptPasswordEncoder;
  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    UserInfo userInfo = null;
    try {
      userInfo = userDao.findByUsername(username);//调用到层根据用户查找用户信息,返回值为UserInfo对象
    } catch (Exception e) {
      e.printStackTrace();
    }
    //处理自己的用户对象封装成UserDetails
    // User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getAuthority(userInfo.getRoles()));//下面这个三元表达式代表该账户是否激活可用
    User user = new User(userInfo.getUsername(), userInfo.getPassword(), userInfo.getStatus() == 0 ? false : true, true, true, true, getAuthority(userInfo.getRoles()));
    return user;
  }
  //作用就是返回一个List集合,集合中装入的是角色描述
  public List getAuthority(List roles) {
    List list = new ArrayList<>();
    for (Role role : roles) {
      list.add(new SimpleGrantedAuthority("ROLE_" + role.getRoleName()));
    }
    return list;
  }
  /**
   * 用户的添加
   * @param userInfo
   */
  @Override
  public void save(UserInfo userInfo) throws Exception {
    //对密码进行加密处理
    userInfo.setPassword(bCryptPasswordEncoder.encode(userInfo.getPassword()));
    userDao.save(userInfo);
  }
}

  4.启动项目进行测试添加用户,新添加的用户是否可以登录成功。

总结

到此这篇关于Spring Security使用数据库认证及用户密码加密和解密功能的文章就介绍到这了,更多相关Spring Security数据库认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(Spring Security使用数据库认证及用户密码加密和解密功能)