1.先导入Spring Security框架的依赖 (spring-security-crypto)
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
<version>5.3.8.RELEASE</version>
</dependency>
2.创建Bean注入进去
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import java.security.SecureRandom;
@Configuration
public class PasswordConfig {
/**
* 随机秘钥的长度
*/
private int seedLength = 32;
/**
* : 10 # 加密强度4~31,决定了密码和盐加密时的运算次数,超过10以后加密耗时会显著增加
*/
private Integer strength = 10;
@Bean
public BCryptPasswordEncoder passwordEncoder() {
// 加密强度,数字越大强度越大,越安全,越耗时
SecureRandom random = new SecureRandom(SecureRandom.getSeed(seedLength));
return new BCryptPasswordEncoder(strength, random);
}
}
3.BCryptPasswordEncoder 是PasswordEncoder接口实现类直接拿到对象使用就行
@Autowired
BCryptPasswordEncoder bCryptPasswordEncoder;
// 注册用户存入密码的时候需要加密密码
String encode = bCryptPasswordEncoder.encode("前端传入的初始密码");
//将User保存到数据库表,该表包含password列
user.setPassword(passwordEncoder.encode("前端传入的初始密码");
//注册完后登录验证密码
//结果为ture就是验证成功
boolean matches = bCryptPasswordEncoder.matches("前端传入的初始密码","数据库查到的密码");
//验证密码是否需要升级
//结果为flase就是不需要升级 默认是不需要升级
boolean encoding = bCryptPasswordEncoder.upgradeEncoding("加密之后的密码--encode");