ContiNew
加密

密码编码器

基于 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)。

目录