feat:改密
This commit is contained in:
@@ -11,7 +11,7 @@ public class AdminChangePasswordRequest {
|
||||
private String oldPassword;
|
||||
|
||||
@NotBlank(message = "newPassword is required")
|
||||
@Schema(description = "新口令", example = "中Abc1234")
|
||||
@Schema(description = "新口令", example = "Abc1234!")
|
||||
private String newPassword;
|
||||
|
||||
public String getOldPassword() {
|
||||
|
||||
@@ -13,7 +13,7 @@ public class ChangePasswordRequest {
|
||||
private String oldPassword;
|
||||
|
||||
@NotBlank(message = "newPassword is required")
|
||||
@Schema(description = "新口令", example = "中Abc1234")
|
||||
@Schema(description = "新口令", example = "Abc1234!")
|
||||
private String newPassword;
|
||||
|
||||
public String getOldPassword() {
|
||||
|
||||
@@ -5,41 +5,57 @@ import com.cisd.tms.common.exception.BizException;
|
||||
|
||||
public final class PasswordComplexityValidator {
|
||||
|
||||
public static final String MESSAGE = "密码复杂度不符合要求:需包含中文、英文、数字或特殊字符,长度不少于八位";
|
||||
public static final String MESSAGE = "密码复杂度不符合要求:需由8到16位大小写字母、数字、符号组成,且三类均需包含";
|
||||
|
||||
private PasswordComplexityValidator() {
|
||||
}
|
||||
|
||||
public static void validate(String password) {
|
||||
String value = password == null ? "" : password;
|
||||
if (value.length() < 8 || !containsChinese(value) || !containsEnglish(value) || !containsDigitOrSpecial(value)) {
|
||||
if (value.isBlank()
|
||||
|| value.length() < 8
|
||||
|| value.length() > 16
|
||||
|| !isAllowedCharacters(value)
|
||||
|| !containsUppercase(value)
|
||||
|| !containsLowercase(value)
|
||||
|| !containsDigit(value)
|
||||
|| !containsSymbol(value)) {
|
||||
throw new BizException(ErrorCode.VALIDATE_FAILED.getCode(), MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean containsChinese(String value) {
|
||||
return value.codePoints().anyMatch(codePoint -> Character.UnicodeScript.of(codePoint) == Character.UnicodeScript.HAN);
|
||||
private static boolean isAllowedCharacters(String value) {
|
||||
return value.codePoints().allMatch(codePoint ->
|
||||
isAsciiLetter(codePoint) || isAsciiDigit(codePoint) || isSymbol(codePoint));
|
||||
}
|
||||
|
||||
private static boolean containsEnglish(String value) {
|
||||
return value.codePoints().anyMatch(codePoint ->
|
||||
(codePoint >= 'A' && codePoint <= 'Z') || (codePoint >= 'a' && codePoint <= 'z'));
|
||||
private static boolean containsUppercase(String value) {
|
||||
return value.codePoints().anyMatch(codePoint -> codePoint >= 'A' && codePoint <= 'Z');
|
||||
}
|
||||
|
||||
private static boolean containsDigitOrSpecial(String value) {
|
||||
return value.codePoints().anyMatch(codePoint ->
|
||||
Character.isDigit(codePoint) || isSpecial(codePoint));
|
||||
private static boolean containsLowercase(String value) {
|
||||
return value.codePoints().anyMatch(codePoint -> codePoint >= 'a' && codePoint <= 'z');
|
||||
}
|
||||
|
||||
private static boolean isSpecial(int codePoint) {
|
||||
return !Character.isWhitespace(codePoint)
|
||||
&& !Character.isDigit(codePoint)
|
||||
&& !isChineseOrEnglish(codePoint);
|
||||
private static boolean containsDigit(String value) {
|
||||
return value.codePoints().anyMatch(PasswordComplexityValidator::isAsciiDigit);
|
||||
}
|
||||
|
||||
private static boolean isChineseOrEnglish(int codePoint) {
|
||||
return Character.UnicodeScript.of(codePoint) == Character.UnicodeScript.HAN
|
||||
|| (codePoint >= 'A' && codePoint <= 'Z')
|
||||
|| (codePoint >= 'a' && codePoint <= 'z');
|
||||
private static boolean containsSymbol(String value) {
|
||||
return value.codePoints().anyMatch(PasswordComplexityValidator::isSymbol);
|
||||
}
|
||||
|
||||
private static boolean isAsciiLetter(int codePoint) {
|
||||
return (codePoint >= 'A' && codePoint <= 'Z') || (codePoint >= 'a' && codePoint <= 'z');
|
||||
}
|
||||
|
||||
private static boolean isAsciiDigit(int codePoint) {
|
||||
return codePoint >= '0' && codePoint <= '9';
|
||||
}
|
||||
|
||||
private static boolean isSymbol(int codePoint) {
|
||||
return codePoint >= 33 && codePoint <= 126
|
||||
&& !isAsciiDigit(codePoint)
|
||||
&& !isAsciiLetter(codePoint);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user