- 文档
官方文档:https://www.tutorialspoint.com/passay/index.htm
中文文档:https://www.imangodoc.com/36543.html
中文文档差不多是官方文档的翻译,挺简单的。
组要分为规则,生成器和验证器三个部分。
- maven 依赖
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>${passay.verion}</version>
</dependency>
- 示例代码
public class PasswordConstraintValidator {
/**
* 验证规则
*
* @return
*/
private static List<Rule> ruleList() {
return Arrays.asList(
//长度规则,8-30
new LengthRule(8, 30),
//字符规则 至少有一个大写字母
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 boolean isValid(String password) {
PasswordValidator validator = new PasswordValidator(ruleList());
return validator.validate(new PasswordData(password)).isValid();
}
/**
* 生成规则
*
* @return
*/
private static List<CharacterRule> generatePasswordRule() {
return Arrays.asList(
//字符规则 至少有一个大写字母
new CharacterRule(EnglishCharacterData.UpperCase, 1),
//字符规则 至少有一个小写字母
new CharacterRule(EnglishCharacterData.LowerCase, 1),
//字符规则 至少一个数字
new CharacterRule(EnglishCharacterData.Digit, 1)
//字符规则 至少有一个特殊字符
// ,new CharacterRule(EnglishCharacterData.Special, 1)
, new CharacterRule(RangeCharacterData.range,3)
);
}
public static String generatePassword() {
PasswordGenerator generator = new PasswordGenerator();
return generator.generatePassword(8, generatePasswordRule());
}
public static void main(String[] args) {
boolean valid = isValid("Ace$#123");
System.out.println(valid);
System.out.println(generatePassword());
}
/**
* 自定义生成器
*/
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;
}
}
}