最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)登錄密碼強(qiáng)度校驗(yàn)的項(xiàng)目實(shí)踐

 更新時(shí)間:2024年01月25日 15:05:35   作者:道小生  
本文主要介紹了Java實(shí)現(xiàn)登錄密碼強(qiáng)度校驗(yàn)的項(xiàng)目實(shí)踐,包括使用正則表達(dá)式匹配校驗(yàn)和密碼強(qiáng)度校驗(yàn)工具類這兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下

方式1:使用正則表達(dá)式匹配校驗(yàn)

  • 不同規(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ù)雜度校驗(yàn)
     * @param password 密碼
     * @return 校驗(yàn)密碼強(qiáng)度是否合格 true/false
     */
    public static boolean isStrongPassword(String password) {
        if (StringUtils.isBlank(password)) {
            return false;
        }
        return password.matches(PWD_REGEX);
    }
}

方式2:密碼強(qiáng)度校驗(yàn)工具類

  • 工具類
public class CheckPwdUtil {

    private CheckPwdUtil(){}

    /**
     * 密碼等級(jí)枚舉
     * 這里可以根據(jù)實(shí)際業(yè)務(wù)需求,擴(kuò)展更多等級(jí)
     * 例如: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)度等級(jí),包括EASY、STRONG
     * @param passwd 密碼
     * @return 密碼等級(jí)枚舉
     */
    public static PASSWD_LEVEL getPasswordLevel(String passwd) {
        int level = check(passwd);
        /**
	     * 這里可以根據(jù)業(yè)務(wù)需求,判斷不同的level來區(qū)分多級(jí)密碼強(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 密碼等級(jí)
     */
    private static int check(String passwd) {
        if (null == passwd) {
            throw new IllegalArgumentException("密碼為空");
        }
        int level = 0;
        // 增加點(diǎn)
        //判斷密碼長度是否大于等于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;
    }

    /**
     * 計(jì)算密碼中指定字符類型的數(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;
    }
}
  • 使用
/**
 * 賬號(hào)注冊(cè)
 *
 * @param param 注冊(cè)賬號(hào)信息
 * @return 接口統(tǒng)一返回
 */
public Result signIn(Param param) {
	// 其他邏輯
	......
	
	if (CheckPwdUtil.PASSWD_LEVEL.EASY.equals(CheckPwdUtil.getPasswordLevel(param.getPassword()))) {
        return new Err<>("密碼必須包含大寫字母、小寫字母、數(shù)字和特殊字符,且長度是8位以上");
    }
    
	// 其他邏輯
	......
}

以上兩種方式都可實(shí)現(xiàn)密碼強(qiáng)度校驗(yàn),可根據(jù)自身業(yè)務(wù)需要選擇使用。

到此這篇關(guān)于Java實(shí)現(xiàn)登錄密碼強(qiáng)度校驗(yàn)的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)Java 登錄密碼強(qiáng)度校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中使用同步回調(diào)和異步回調(diào)的示例詳解

    Java中使用同步回調(diào)和異步回調(diào)的示例詳解

    這篇文章主要介紹了Java中使用同步回調(diào)和異步回調(diào)的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Java工廠模式的深入了解

    Java工廠模式的深入了解

    這篇文章主要為大家介紹了Java工廠模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java線程池中的工作線程Worker類源碼解析

    Java線程池中的工作線程Worker類源碼解析

    這篇文章主要介紹了Java線程池中的工作線程Worker類源碼解析,線程池中的工作線程是通過內(nèi)部類Worker表示的,Worker繼承自AbstractQueueSynchronizer,可以實(shí)現(xiàn)同步器的功能,需要的朋友可以參考下
    2023-12-12
  • Java設(shè)計(jì)模式之java迭代器模式詳解

    Java設(shè)計(jì)模式之java迭代器模式詳解

    這篇文章主要介紹了java迭代器模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • HttpServletRequest對(duì)象方法的用法小結(jié)

    HttpServletRequest對(duì)象方法的用法小結(jié)

    HttpServletRequest對(duì)象代表客戶端的請(qǐng)求,當(dāng)客戶端通過HTTP協(xié)議訪問服務(wù)器時(shí),HTTP請(qǐng)求頭中的所有信息都封裝在這個(gè)對(duì)象中,開發(fā)人員通過這個(gè)對(duì)象的相關(guān)方法,即可以獲得客戶的這些信息
    2017-03-03
  • 通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法

    通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇關(guān)于通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • java?獲取子串速率比較分析

    java?獲取子串速率比較分析

    這篇文章主要為大家介紹了java?獲取子串速率比較分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • idea切換git地址并刷新右下角git分支

    idea切換git地址并刷新右下角git分支

    這篇文章主要介紹了idea切換git地址并刷新右下角git分支,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringAop切面執(zhí)行順序?qū)嵺`

    SpringAop切面執(zhí)行順序?qū)嵺`

    本文介紹Spring AOP中自定義切面與內(nèi)置切面的執(zhí)行順序控制方法,通過@Order注解設(shè)置切面優(yōu)先級(jí),確保業(yè)務(wù)邏輯正確執(zhí)行,感興趣的可以了解一下
    2026-04-04
  • Java中HttpServletResponse響應(yīng)中文出現(xiàn)亂碼問題

    Java中HttpServletResponse響應(yīng)中文出現(xiàn)亂碼問題

    這篇文章主要介紹了Java中HttpServletResponse響應(yīng)中文出現(xiàn)亂碼問題的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06

最新評(píng)論

抚顺市| 修水县| 平南县| 沙坪坝区| 惠来县| 大厂| 汤原县| 南雄市| 潍坊市| 安陆市| 永州市| 江山市| 皮山县| 灌阳县| 南城县| 静海县| 固始县| 财经| 全州县| 墨竹工卡县| 金沙县| 达拉特旗| 桂东县| 麻城市| 永康市| 漾濞| 江阴市| 松江区| 福安市| 桐乡市| 宜州市| 丹棱县| 南江县| 扬州市| 扎赉特旗| 图片| 开封县| 金溪县| 波密县| 团风县| 德清县|