密码编码器
基于 Spring Security Crypto 的单向散列密码编码器,默认装配 DelegatingPasswordEncoder,密文自带算法前缀,便于算法平滑升级。
基于 Spring Security Crypto 提供单向散列密码编码能力,默认装配 Spring 的 DelegatingPasswordEncoder,密文自带 {algorithm} 前缀,便于算法平滑升级。
引入依赖
<dependency>
<groupId>top.continew.starter</groupId>
<artifactId>continew-starter-encrypt-password-encoder</artifactId>
</dependency>配置
配置项定义在 top.continew.starter.encrypt.password.encoder.autoconfigure.PasswordEncoderProperties 中:
continew-starter:
encrypt:
password-encoder:
# 是否启用(默认:false,必须显式配置为 true)
enabled: true
# 默认启用的编码器算法(默认:BCRYPT)
algorithm: BCRYPT| 配置项 | 说明 | 默认值 |
|---|---|---|
continew-starter.encrypt.password-encoder.enabled | 是否启用密码编码器自动配置 | false |
continew-starter.encrypt.password-encoder.algorithm | 默认编码算法(BCRYPT / SCRYPT / PBKDF2 / ARGON2) | BCRYPT |
自动装配条件为 continew-starter.encrypt.password-encoder.enabled=true,未设置缺省匹配,默认不装配,引入依赖后请务必显式开启。
使用 PasswordEncoder
装配后直接注入 Spring 的 PasswordEncoder(DelegatingPasswordEncoder,默认算法取配置项):
@RequiredArgsConstructor
@Service
public class DemoService {
private final PasswordEncoder passwordEncoder;
public void demo(String rawPassword) {
// 编码:密文形如 {bcrypt}$2a$10$...
String encoded = passwordEncoder.encode(rawPassword);
// 校验
boolean matches = passwordEncoder.matches(rawPassword, encoded);
}
}使用 PasswordEncoderUtil 工具类
top.continew.starter.encrypt.password.encoder.util.PasswordEncoderUtil 提供静态方法,脱离容器也可按 PasswordEncoderAlgorithm 指定算法编码/校验:
// 按指定算法编码/校验,无需注入 Bean
String encoded = PasswordEncoderUtil.encode(PasswordEncoderAlgorithm.ARGON2, rawPassword);
boolean matches = PasswordEncoderUtil.matches(PasswordEncoderAlgorithm.ARGON2, rawPassword, encoded);作为字段加密器使用
密码类字段(如登录密码)不可逆,可通过 PasswordEncoderEncryptor 桥接到 @FieldEncrypt:
@FieldEncrypt(encryptor = PasswordEncoderEncryptor.class)
private String password;PasswordEncoderEncryptor 的解密操作恒返回原文(不可逆),仅适用于密码等单向散列场景;已符合算法格式的密文不会被重复编码。使用该加密器需确保密码编码器自动配置已开启(容器中存在 PasswordEncoder Bean)。