文章配套代码:https://gitee.com/lookoutthebush/spring-security-demo
一、SpringSecurity加密机制
Spring Security内置了密码加密机制,只需使用一个PasswordEncoder接口即可
public interface PasswordEncoder {
String encode(CharSequence rawPassword);
boolean matches(CharSequence rawPassword, String encodedPassword);
default boolean upgradeEncoding(String encodedPassword) {
return false;
}
}
PasswordEncoder接口定义了encode和matches两个方法,当用数据库存储用户密码时,加密过程用 encode方法,matches方法用于判断用户登录时输入的密码是否正确。
此外,SpringSecurity还内置了几种常用的PasswordEncoder接口实现类,例如,StandardPasswordEncoder中的常规摘要算法(SHA-256等)、BCryptPasswordEncoder加密,以及类似 BCrypt的慢散列加密Pbkdf2PasswordEncoder等,官方推荐使用BCryptPasswordEncoder。
我们这里使用官方推荐的BCryptPasswordEncoder。
二、注入BCryptPasswordEncoder
/**
* @author LookOutTheBush
*/
@Configuration
public class PasswordEncoderConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12);
}
}
三、创建用户时加密
@Service
public class UserServiceImpl implements UserDetailsService {
@Resource
private UserDao userDao;
@Resource
private PasswordEncoder passwordEncoder;
public UsersDO createUser(UsersDO usersDO){
//参数校验 todo
usersDO.setPassword(passwordEncoder.encode(usersDO.getPassword()));
usersDO.setEnable(true);
return userDao.createUser(usersDO);
}
}
四、登录时密码校验
这部分SpringSecurity会使用我们暴露的加密方式来校验密码,不需要我们操作。
五、测试
1.直接生成加密后的密码。
public static void main(String[] args) {
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(12);
String encode = bCryptPasswordEncoder.encode("123");
System.out.println(encode);
}
2.然后手动添加到数据库中
3.启动项目测试:
输入账号密码,登录成功。
版权声明:本文为LookOutThe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。