密码编码器
简介
continew-starter-encrypt-password-encoder 是 ContiNew Starter 加密模块提供的密码编码器(@since 1.3.0),基于 Spring Security Crypto 提供单向散列密码编码能力,默认装配 Spring 的 DelegatingPasswordEncoder。
模块演进
v1.3.0 诞生于 security/password 模块,v2.13.4 融合进 security-crypto,v2.14.0 独立为 encrypt-password-encoder 模块,配置前缀变更为 continew-starter.encrypt.password-encoder。
主要特性
- 多算法: 内置 BCrypt、SCrypt、PBKDF2、Argon2 四种单向散列算法
- 委托编码: 装配 DelegatingPasswordEncoder,密文自带
{algorithm}前缀,便于算法平滑升级 - 工具类: 提供 PasswordEncoderUtil 静态方法,脱离容器也可按算法编码/校验
- 可桥接: 通过 PasswordEncoderEncryptor 可作为 @FieldEncrypt 的加密器使用(密码场景)
快速开始
引入依赖
<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.enabled=true(未设置缺省匹配,默认不装配),引入依赖后请务必显式配置。
--- ### 密码编码器配置
continew-starter.encrypt:
password-encoder:
# 是否启用(必须显式配置为 true)
enabled: true
# 默认启用的编码器算法(默认 BCRYPT)
algorithm: BCRYPT使用 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 工具类(@since 2.13.3)
// 按指定算法编码/校验,无需注入 Bean
String encoded = PasswordEncoderUtil.encode(PasswordEncoderAlgorithm.ARGON2, rawPassword);
boolean matches = PasswordEncoderUtil.matches(PasswordEncoderAlgorithm.ARGON2, rawPassword, encoded);作为字段加密器使用(@since 2.13.3)
密码类字段(如登录密码)不可逆,可通过 PasswordEncoderEncryptor 桥接到 @FieldEncrypt:
@FieldEncrypt(encryptor = PasswordEncoderEncryptor.class)
private String password;不可逆
PasswordEncoderEncryptor 的解密操作恒返回原文(不可逆),仅适用于密码等单向散列场景;已符合算法格式的密文不会被重复编码。
核心依赖
| 依赖 | 描述 |
|---|---|
| top.continew.starter:continew-starter-encrypt-core | 加密模块 - 核心模块 |
| org.springframework.security:spring-security-crypto | Spring Security 加密模块(提供各类密码编码器) |