passay——密码验证器和生成器

一、导入pom依赖

<!--密码生成器和验证器-->
<dependency>
  <groupId>org.passay</groupId>
  <artifactId>passay</artifactId>
  <version>1.3.1</version>
</dependency>

二、工具类

package com.genertech.plm.aia.util;

import org.passay.CharacterData;
import org.passay.*;
import java.util.Arrays;
import java.util.List;

/**
 * @beLongProjecet: aia-application-access-control
 * @beLongPackage: com.genertech.plm.aia.util
 * @author: huo.qw
 * @createTime: 2023/08/30 下午 03:09
 * @description:
 * @version: v1.0
 */
public class PasswordValidatorAndGenerator {
  /**
   * 验证规则: 8-16位的字母、数字、特殊字符组合
   *
   * @return
   */
  private static List<Rule> ruleList() {
    return Arrays.asList(
        //长度规则,8-16
        new LengthRule(8, 16),
        //字符规则 至少有一个字母(不区分大小写)
        new CharacterRule(EnglishCharacterData.Alphabetical, 1),
        /*//字符规则 至少有一个大写字母
        new CharacterRule(EnglishCharacterData.UpperCase, 1),
        //字符规则 至少有一个小写字母
        new CharacterRule(EnglishCharacterData.LowerCase, 1),*/
        //字符规则 至少一个数字
        new CharacterRule(EnglishCharacterData.Digit, 1),
        //字符规则 至少有一个特殊字符
        new CharacterRule(EnglishCharacterData.Special, 1),
        /*//非法顺序规则 不允许有5个连续字母表顺序的字母,比如不允许abCde
        new IllegalSequenceRule(EnglishSequenceData.Alphabetical, 5, false),
        //非法顺序规则 不允许有5个连续数字顺序的数字 比如不允许12345
        new IllegalSequenceRule(EnglishSequenceData.Numerical, 5, false),
        //非法顺序规则 不允许有5个连续键盘顺序的字母 比如不允许asDfg
        new IllegalSequenceRule(EnglishSequenceData.USQwerty, 5, false),*/
        //空格规则,不能有空格
        new WhitespaceRule()
    );
  }

  public static RuleResult isValid(String password) {
    PasswordValidator validator = new PasswordValidator(ruleList());
    RuleResult ruleResult = validator.validate(new PasswordData(password));
    return ruleResult;
  }

  /**
   * 生成规则(设计时注意生成的密码要能通过检验规则!生成后最好调用校验方法校验以确保生成的是合法的密码)
   *
   * @return
   */
  private static List<CharacterRule> generatePasswordRule() {
    return Arrays.asList(
            //字符规则 至少有1个大写字母
            new CharacterRule(EnglishCharacterData.UpperCase, 1),
            //字符规则 至少有1个小写字母
            new CharacterRule(EnglishCharacterData.LowerCase, 1),
            //字符规则 至少3个数字
            new CharacterRule(EnglishCharacterData.Digit, 3)
            /*//字符规则 至少有1个特殊字符
            ,new CharacterRule(EnglishCharacterData.Special, 1)*/
            //字符规则 至少有1个自定义的特殊字符
            , new CharacterRule(RangeCharacterData.range, 1)
    );
  }

  public static String generatePassword() {
    PasswordGenerator generator = new PasswordGenerator();
    // 指定生成的默认密码长度为8位
    String generatedPwd = generator.generatePassword(8, generatePasswordRule());
    // 生成后最好调用校验方法校验以确保生成的是合法的密码
    while (!isValid(generatedPwd).isValid()){
      generatedPwd = generator.generatePassword(8, generatePasswordRule());
    }
    return generatedPwd;
  }

  /**
   * 自定义生成器
   */
  private static enum RangeCharacterData implements CharacterData {
    range("INSUFFICIENT_SPECIAL", "~!@#$%^&*()_+");

    private String errorCode;
    private String characters;

    private RangeCharacterData(String code, String charString) {
      this.errorCode = code;
      this.characters = charString;
    }

    @Override
    public String getErrorCode() {
      return this.errorCode;
    }

    @Override
    public String getCharacters() {
      return this.characters;
    }
  }

  public static void main(String[] args) {
    RuleResult valid = isValid("A1#asDfgA1#asDfg");
    System.out.println(valid.toString());
    System.out.println(generatePassword());
  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值