一、密码安全的重要性
密码加密是一个很重要的安全性问题,当数据库存储密码时,应该使用可以安全存储用户密码的意识,防止数据库的明文密码泄露造成严重灾难
二、加密机制
PasswordEncoder接口
public interface PasswordEncoder {
/**
* 加密过程
String encode(CharSequence rawPassword);
/**
* 判断密码是否正确
*/
boolean matches(CharSequence rawPassword, String encodedPassword);
}
其中encode方法是加密过程,matches方法用于判断用户登录时输入的密码是否正确

可以看到SpringSecurity提供了很多的实现类,方便各种加密方式,也可以自己实现PasswordEncoder接口,重写以上两种方法,实现自定义的加密以及匹配模式
SpringSecurity官方推荐使用BCryptPasswordEncoder加密方式,其主要是通过限制算法的速度,让暴力穷举破解无法承受
三、BCrypt加密方式实现
主要是在Security的配置文件中修改
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(myUserDetailService).passwordEncoder(new BCryptPasswordEncoder(12));
}
因为数据库之前存的是明文密码,加密方式更改之后,数据库中的密码必须改为BCrypt加密方式,这里提供一个123456加密后的密码$2a121212u5fGdlQBp7PjHz1.j0gbD.S8wjeeiY6ftVg8S9I9KYKOEuKpQEIyG,存入数据库后。
启动应用,输入用户名和密码,即可成功登录

本文探讨了密码安全的重要性,介绍了Spring Security的PasswordEncoder接口及其加密机制。重点讲解了BCrypt加密方式,官方推荐使用它来提高密码安全性。在配置文件中启用BCrypt后,需要将数据库中的明文密码更新为BCrypt加密格式,例如示例中的加密密码。通过这种方式,用户登录时可以进行安全的身份验证。
密码加密&spm=1001.2101.3001.5002&articleId=104933777&d=1&t=3&u=cc66059ebf40440584eb467d6f1f1f1e)

被折叠的 条评论
为什么被折叠?



