política de contraseñas
Introduzca el componente passay (Pasay); por lo general, la mayoría de las aplicaciones web tienen sus propias políticas de contraseñas, es decir, obligan a los usuarios a crear contraseñas complejas que son difíciles de descifrar. Podemos aprovechar la biblioteca de Passay para generar o verificar contraseñas y crear políticas de contraseña seguras.
<ip2region.version>2.6.4</ip2region.version>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>${ip2region.version}</version>
</dependency>
Crear una clase de personaje especial
import org.passay.CharacterData;
/**
* @Author gsh
* @Description //密码特殊字符
* @Date 2023-02-03 10:57:54
*/
public 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;
}
}
Crear una clase de herramienta de generación de verificación de contraseña
import org.passay.*;
import java.util.Arrays;
import java.util.List;
/**
* @Author gsh
* @Description //密码规则验证和生成工具类
* @Date 2023-02-03 11:00:21
*/
public class PasswordUtils {
/**
* @Author gsh
* @Description //密码验证规则
* @Date 2023-02-03 11:01:28
*/
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, 3),
//非法顺序规则 不允许有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()
);
}
/**
* @Author gsh
* @Description //验证密码规则
* @Date 2023-02-03 10:58:48
*/
public static boolean isValid(String password) {
PasswordValidator validator = new PasswordValidator(ruleList());
return validator.validate(new PasswordData(password)).isValid();
}
/**
* @Author gsh
* @Description //密码生成规则
* @Date 2023-02-03 11:03:22
*/
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)
);
}
/**
* @Author gsh
* @Description //密码生成方法
* @Date 2023-02-03 10:59:14
*/
public static String generatePassword(Integer len) {
if (null == len || 0 == len) {
len = 8;
}
PasswordGenerator generator = new PasswordGenerator();
return generator.generatePassword(len, generatePasswordRule());
}
}