Class PasswordStrengthValidator

java.lang.Object
cn.dinodev.spring.commons.validation.validator.PasswordStrengthValidator
All Implemented Interfaces:
jakarta.validation.ConstraintValidator<PasswordStrength,String>

public class PasswordStrengthValidator extends Object implements jakarta.validation.ConstraintValidator<PasswordStrength,String>
密码强度校验器

该校验器用于验证密码是否符合指定的强度要求,支持以下几种验证模式:

  • NUMERIC - 仅包含数字
  • NUMERIC_SPECIAL_CHARACTER - 包含数字和特殊字符
  • LETTER - 包含字母(可指定大小写要求)
  • NUMERIC_LETTER - 包含数字和字母
  • LETTER_SPECIAL_CHARACTER - 包含字母和特殊字符
  • NUMERIC_LETTER_SPECIAL_CHARACTER - 包含数字、字母和特殊字符

对于字母类型,可以进一步指定:

  • ANY - 任意大小写字母
  • LOWER - 仅小写字母
  • UPPER - 仅大写字母
  • BOTH - 同时包含大小写字母

特殊字符包括:)!@#$%^invalid input: '&'*()

Since:
2022-04-01
Author:
Cody Lu
  • Constructor Details

    • PasswordStrengthValidator

      public PasswordStrengthValidator()
  • Method Details

    • initialize

      public void initialize(PasswordStrength constraintAnnotation)
      初始化校验器,根据注解配置确定密码强度检查规则
      Specified by:
      initialize in interface jakarta.validation.ConstraintValidator<PasswordStrength,String>
      Parameters:
      constraintAnnotation - 密码强度约束注解
    • isValid

      public boolean isValid(String value, jakarta.validation.ConstraintValidatorContext context)
      验证密码是否符合强度要求

      验证逻辑:

      1. 如果密码为空或空白,则视为有效(可由其他注解如@NotBlank处理非空验证)
      2. 遍历密码中的每个字符,检查是否满足所有配置的检查规则
      3. 只有当密码包含所有要求的字符类型时,才视为有效

      Specified by:
      isValid in interface jakarta.validation.ConstraintValidator<PasswordStrength,String>
      Parameters:
      value - 待验证的密码字符串
      context - 约束验证上下文
      Returns:
      true 如果密码符合强度要求,false 否则