package com.example.demo.util;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.List;
@Slf4j
public class ValidationUtil {
private ValidationUtil() {
}
private static final String SPECIAL_CHARACTERS = "!@#$%^&*()_+{}:\"<>?";
public static boolean isInvalidPassword(String password) {
if (password == null || password.length() < 8) {
return true;
}
boolean hasDigit = false;
boolean hasCapitalLetter = false;
boolean hasSmallLetter = false;
boolean hasSpecialChar = false;
for (char c : password.toCharArray()) {
if (Character.isDigit(c)) {
hasDigit = true;
} else if (Character.isLetter(c) && Character.isUpperCase(c)) {
hasCapitalLetter = true;
} else if (Character.isLetter(c) && Character.isLowerCase(c)) {
hasSmallLetter = true;
} else if (SPECIAL_CHARACTERS.indexOf(c) != -1) {
hasSpecialChar = true;
}
if ((hasDigit && hasCapitalLetter && hasSmallLetter) ||
(hasDigit && hasCapitalLetter && hasSpecialChar) ||
(hasCapitalLetter && hasSmallLetter && hasSpecialChar) ||
(hasDigit && hasSmallLetter && hasSpecialChar)) {
return isContainCommonPassword(password);
}
}
return true;
}
private static final List<String> COMMON_PASSWORD = Arrays.asList("user", "usr", "admin", "administrator", "root",
"shell", "audit", "auditor", "manager", "web", "sys", "system", "default");
private static boolean isContainCommonPassword(String password) {
String lowerCasePassword = password.toLowerCase();
for (String commonPassword : COMMON_PASSWORD) {
if (lowerCasePassword.contains(commonPassword)) {
log.info("密码包含了常用密码字符");
return true;
}
}
return false;
}
}