推荐一款好用的密码强度校验工具,再也不用痛苦地拼正则表达式了

话不多说,直接代码

maven依赖

     <dependency>
            <groupId>org.passay</groupId>
            <artifactId>passay</artifactId>
            <version>1.6.0</version>
        </dependency>

实现方法:

public interface PasswordStrengthChecker {

    default String noticeMessage() {
        return "请设置安全的密码规则";
    }

    void checkPassword(String password);

}

// 默认实现

public class DefaultPasswordStrengthChecker implements PasswordStrengthChecker {

    private PasswordValidator passwordValidator;

    private String errorMessage;

    public DefaultPasswordStrengthChecker() {

        this.errorMessage = "密码由6-12个位数字、小写字母组成,不能出现连续3位字符";

        this.passwordValidator = new PasswordValidator(ZYListUtils.toList(
        		// 长度
                new LengthRule(6, 12),
                // 至少一个大写字母
                //new CharacterRule(EnglishCharacterData.UpperCase, 1),
                // 至少一个小写字母
                new CharacterRule(EnglishCharacterData.LowerCase, 1),
                // 至少一个数字
                new CharacterRule(EnglishCharacterData.Digit, 1),
                // 至少一个特殊字符
                //new CharacterRule(EnglishCharacterData.Special, 1),
                // 不允许5个连续字母
                new IllegalSequenceRule(EnglishSequenceData.Alphabetical, 3, false),
                // 不允许3个连续数字
                new IllegalSequenceRule(EnglishSequenceData.Numerical, 3, false),
                // 不允许3个连续键盘
                new IllegalSequenceRule(EnglishSequenceData.USQwerty, 3, false),
                // 不允许出现空格
                new WhitespaceRule()
                
                //TODO  还可以玩出很多花活....
        ));
    }

    @Override
    public String noticeMessage() {
        return errorMessage;
    }

    @Override
    public void checkPassword(String password) {
        if (ZYStrUtils.isNull(password)) {
            throw new LocalException("密码不能为空");
        }
        // passay框架返回的不匹配信息,可以细化到某一项上匹配,此处处理有点粗糙。可按需细化下,里面都是大写字母的code
        RuleResult validate = passwordValidator.validate(new PasswordData(password));
        List<RuleResultDetail> details = validate.getDetails();
        if (ZYListUtils.isNotEmptyList(details)) {
            throw new LocalException(errorMessage);
        }
    }
}

// 配置,支持子工程覆盖规则

    @Bean
    @ConditionalOnMissingBean(PasswordStrengthChecker.class)
    public PasswordStrengthChecker defaultPasswordStrengthChecker() {
        return new DefaultPasswordStrengthChecker();
    }

你可能感兴趣的:(java)