密码要加盐处理,这是常识。各个权限处理框架对此都有不同程度的支持,Shiro、SpringSecurity都有自家的解决方案,SpringSecurity中有一个升级版的消息摘要:

BCryptPasswordEncoder

使用BCryptPasswordEncoder,即使相同的明文,生成的新的加密字符串都是不一样的,这样可以避免像在Shiro中那样我们自己配置密码的盐,SpringSecurity中使用BCryptPasswordEncoder的具体流程如下:

注册处理

在用户注册时,我们需要对密码进行处理,处理方式如下:

  1. public int hrReg(String username, String password) {
  2. //如果用户名存在,返回错误
  3. if (hrMapper.loadUserByUsername(username) != null) {
  4. return -1;
  5. }
  6. BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
  7. String encode = encoder.encode(password);
  8. return hrMapper.hrReg(username, encode);
  9. }

通过BCryptPasswordEncoder中的encode方法对密码进行处理。

当用户注册成功之后,存在数据库中的密码就像下面这样:

p283

登录处理

密码加密处理之后,登录时候也要对密码进行处理,修改WebSecurityConfig类的configure(AuthenticationManagerBuilder auth)方法,改为下面这样即可:

  1. @Override
  2. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  3. auth.userDetailsService(hrService).passwordEncoder(new BCryptPasswordEncoder());
  4. }