123
This commit is contained in:
7
.claude/settings.local.json
Normal file
7
.claude/settings.local.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Edit"
|
||||
]
|
||||
}
|
||||
}
|
||||
157
ruoyi-cai/src/main/java/com/ruoyi/cai/util/PasswordUtil.java
Normal file
157
ruoyi-cai/src/main/java/com/ruoyi/cai/util/PasswordUtil.java
Normal file
@@ -0,0 +1,157 @@
|
||||
package com.ruoyi.cai.util;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 密码安全校验工具类
|
||||
*
|
||||
* @author 77
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
public class PasswordUtil {
|
||||
|
||||
/**
|
||||
* 密码最小长度
|
||||
*/
|
||||
private static final int MIN_PASSWORD_LENGTH = 8;
|
||||
|
||||
/**
|
||||
* 常见弱密码列表
|
||||
*/
|
||||
private static final Set<String> COMMON_WEAK_PASSWORDS = new HashSet<>(Arrays.asList(
|
||||
"123456",
|
||||
"12345678",
|
||||
"123456789",
|
||||
"password",
|
||||
"qwerty",
|
||||
"12345",
|
||||
"1234567",
|
||||
"1234567890",
|
||||
"111111",
|
||||
"000000",
|
||||
"888888",
|
||||
"666666",
|
||||
"A123456",
|
||||
"a123456",
|
||||
"123456a",
|
||||
"123456A",
|
||||
"123456ab",
|
||||
"123456AB",
|
||||
"Password123",
|
||||
"password123",
|
||||
"Qwerty123",
|
||||
"qwerty123",
|
||||
"Admin123",
|
||||
"admin123",
|
||||
"Abc123456",
|
||||
"abc123456"
|
||||
));
|
||||
|
||||
/**
|
||||
* 字母正则表达式(包含大小写)
|
||||
*/
|
||||
private static final Pattern LETTER_PATTERN = Pattern.compile("[a-zA-Z]");
|
||||
|
||||
/**
|
||||
* 数字正则表达式
|
||||
*/
|
||||
private static final Pattern DIGIT_PATTERN = Pattern.compile("[0-9]");
|
||||
|
||||
/**
|
||||
* 校验密码安全性
|
||||
*
|
||||
* @param password 用户输入的密码
|
||||
* @return 校验结果对象
|
||||
*/
|
||||
public static PasswordValidationResult validatePassword(String password) {
|
||||
PasswordValidationResult result = new PasswordValidationResult();
|
||||
|
||||
// 1. 检查是否为空
|
||||
if (password == null || password.isEmpty()) {
|
||||
result.setValid(false);
|
||||
result.setErrorMessage("密码不能为空");
|
||||
return result;
|
||||
}
|
||||
|
||||
// 2. 检查长度
|
||||
if (password.length() < MIN_PASSWORD_LENGTH) {
|
||||
result.setValid(false);
|
||||
result.setErrorMessage("密码长度不能少于" + MIN_PASSWORD_LENGTH + "位");
|
||||
return result;
|
||||
}
|
||||
|
||||
// 3. 检查是否包含字母
|
||||
if (!LETTER_PATTERN.matcher(password).find()) {
|
||||
result.setValid(false);
|
||||
result.setErrorMessage("密码必须包含字母");
|
||||
return result;
|
||||
}
|
||||
|
||||
// 4. 检查是否包含数字
|
||||
if (!DIGIT_PATTERN.matcher(password).find()) {
|
||||
result.setValid(false);
|
||||
result.setErrorMessage("密码必须包含数字");
|
||||
return result;
|
||||
}
|
||||
|
||||
// 5. 检查是否为常见弱密码
|
||||
String lowerCasePassword = password.toLowerCase();
|
||||
for (String weakPassword : COMMON_WEAK_PASSWORDS) {
|
||||
if (lowerCasePassword.equals(weakPassword.toLowerCase())) {
|
||||
result.setValid(false);
|
||||
result.setErrorMessage("密码过于简单,请使用更复杂的密码");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// 校验通过
|
||||
result.setValid(true);
|
||||
result.setErrorMessage(null);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 快速校验密码(仅返回boolean,不提供详细错误信息)
|
||||
*
|
||||
* @param password 用户输入的密码
|
||||
* @return true-密码安全,false-密码不安全
|
||||
*/
|
||||
public static boolean isPasswordValid(String password) {
|
||||
return validatePassword(password).isValid();
|
||||
}
|
||||
|
||||
/**
|
||||
* 密码校验结果内部类
|
||||
*/
|
||||
public static class PasswordValidationResult {
|
||||
/**
|
||||
* 是否校验通过
|
||||
*/
|
||||
private boolean valid;
|
||||
|
||||
/**
|
||||
* 错误信息(校验失败时有值,校验成功时为null)
|
||||
*/
|
||||
private String errorMessage;
|
||||
|
||||
public boolean isValid() {
|
||||
return valid;
|
||||
}
|
||||
|
||||
public void setValid(boolean valid) {
|
||||
this.valid = valid;
|
||||
}
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user