04.密码加密并加盐

 

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

BCryptPasswordEncoder

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

4.1 注册处理

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

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

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

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

p283

4.2 登录处理

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

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

扫码关注微信公众号 江南一点雨,回复 2TB,获取超 2TB Java 学习教程~

喜欢这篇文章吗?扫码关注公众号【江南一点雨】【江南一点雨】专注于 SPRING BOOT+微服务以及前后端分离技术,每天推送原创技术干货,关注后回复 JAVA,领取松哥为你精心准备的 JAVA 干货!

本文遵守 Attribution-NonCommercial 4.0 International 许可协议。 Attribution-NonCommercial 4.0 International