Java實現(xiàn)登錄密碼強(qiáng)度校驗的項目實踐
方式1:使用正則表達(dá)式匹配校驗
- 不同規(guī)則表達(dá)式
- 密碼必須包含大寫、小寫、數(shù)字和特殊字符,且長度是8位以上
private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,}$";
- 密碼必須包含大寫、小寫、數(shù)字和特殊字符,且長度是8-32位
private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,32}$";
- 密碼是8-16位字母和數(shù)字的組合
private static final String PWD_REGEX = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";
可以根據(jù)自己的使用需求,自己組合
- 使用
public class CheckPwdUtil {
/**
* 密碼必須包含大寫、小寫、數(shù)字和特殊字符,且長度是8位以上
*/
private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,}$";
/**
* 密碼復(fù)雜度校驗
* @param password 密碼
* @return 校驗密碼強(qiáng)度是否合格 true/false
*/
public static boolean isStrongPassword(String password) {
if (StringUtils.isBlank(password)) {
return false;
}
return password.matches(PWD_REGEX);
}
}
方式2:密碼強(qiáng)度校驗工具類
- 工具類
public class CheckPwdUtil {
private CheckPwdUtil(){}
/**
* 密碼等級枚舉
* 這里可以根據(jù)實際業(yè)務(wù)需求,擴(kuò)展更多等級
* 例如:EASY, MIDIUM, STRONG, VERY_STRONG等
*/
public enum PASSWD_LEVEL {
EASY, STRONG
}
/**
* NUM 數(shù)字
* SMALL_LETTER 小寫字母
* CAPITAL_LETTER 大寫字母
* OTHER_CHAR 特殊字符
*/
private static final int NUM = 1;
private static final int SMALL_LETTER = 2;
private static final int CAPITAL_LETTER = 3;
private static final int OTHER_CHAR = 4;
/**
* 獲得密碼強(qiáng)度等級,包括EASY、STRONG
* @param passwd 密碼
* @return 密碼等級枚舉
*/
public static PASSWD_LEVEL getPasswordLevel(String passwd) {
int level = check(passwd);
/**
* 這里可以根據(jù)業(yè)務(wù)需求,判斷不同的level來區(qū)分多級密碼強(qiáng)度
* 例如:
* level <= 2 為EASY
* 2 < level < 5 為MIDIUM
* level > 5 為STRONG
* level > 5 為VERY_STRONG
*/
if (level < 5) {
return CheckPwdUtil.PASSWD_LEVEL.EASY;
} else {
return CheckPwdUtil.PASSWD_LEVEL.STRONG;
}
}
/**
* 檢查密碼的強(qiáng)度
*
* @param passwd 密碼
* @return 密碼等級
*/
private static int check(String passwd) {
if (null == passwd) {
throw new IllegalArgumentException("密碼為空");
}
int level = 0;
// 增加點
//判斷密碼長度是否大于等于8 是level++
int len = passwd.length();
if (len >= 8) {
level++;
}
//判斷密碼是否含有數(shù)字 有l(wèi)evel++
if (countLetter(passwd, NUM) > 0) {
level++;
}
//判斷密碼是否含有小寫字母 有l(wèi)evel++
if (countLetter(passwd, SMALL_LETTER) > 0) {
level++;
}
//判斷密碼是否還有大寫字母 有l(wèi)evel++
if (countLetter(passwd, CAPITAL_LETTER) > 0) {
level++;
}
//判斷密碼是否還有特殊字符 有l(wèi)evel++
if (countLetter(passwd, OTHER_CHAR) > 0) {
level++;
}
return level;
}
/**
* 計算密碼中指定字符類型的數(shù)量
*
* @param passwd 密碼
* @param type 類型
* @return 數(shù)量
*/
private static int countLetter(String passwd, int type) {
int count = 0;
if (null != passwd && !passwd.isEmpty()) {
for (char c : passwd.toCharArray()) {
if (checkCharacterType(c) == type) {
count++;
}
}
}
return count;
}
/**
*檢查字符類型,包括num、大寫字母、小寫字母和其他字符。
*
* @param c – 字符
* @return 類型
*/
private static int checkCharacterType(char c) {
if (c >= 48 && c <= 57) {
return NUM;
}
if (c >= 65 && c <= 90) {
return CAPITAL_LETTER;
}
if (c >= 97 && c <= 122) {
return SMALL_LETTER;
}
return OTHER_CHAR;
}
}
- 使用
/**
* 賬號注冊
*
* @param param 注冊賬號信息
* @return 接口統(tǒng)一返回
*/
public Result signIn(Param param) {
// 其他邏輯
......
if (CheckPwdUtil.PASSWD_LEVEL.EASY.equals(CheckPwdUtil.getPasswordLevel(param.getPassword()))) {
return new Err<>("密碼必須包含大寫字母、小寫字母、數(shù)字和特殊字符,且長度是8位以上");
}
// 其他邏輯
......
}
以上兩種方式都可實現(xiàn)密碼強(qiáng)度校驗,可根據(jù)自身業(yè)務(wù)需要選擇使用。
到此這篇關(guān)于Java實現(xiàn)登錄密碼強(qiáng)度校驗的項目實踐的文章就介紹到這了,更多相關(guān)Java 登錄密碼強(qiáng)度校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中使用同步回調(diào)和異步回調(diào)的示例詳解
這篇文章主要介紹了Java中使用同步回調(diào)和異步回調(diào)的相關(guān)資料,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
HttpServletRequest對象方法的用法小結(jié)
HttpServletRequest對象代表客戶端的請求,當(dāng)客戶端通過HTTP協(xié)議訪問服務(wù)器時,HTTP請求頭中的所有信息都封裝在這個對象中,開發(fā)人員通過這個對象的相關(guān)方法,即可以獲得客戶的這些信息2017-03-03
通過反射注解批量插入數(shù)據(jù)到DB的實現(xiàn)方法
今天小編就為大家分享一篇關(guān)于通過反射注解批量插入數(shù)據(jù)到DB的實現(xiàn)方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
Java中HttpServletResponse響應(yīng)中文出現(xiàn)亂碼問題
這篇文章主要介紹了Java中HttpServletResponse響應(yīng)中文出現(xiàn)亂碼問題的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-06-06

