欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)字和特殊字符,且長(zhǎng)度是8位以上
private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,}$";
  • 密碼必須包含大寫、小寫、數(shù)字和特殊字符,且長(zhǎng)度是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ù)字和特殊字符,且長(zhǎng)度是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)
        //判斷密碼長(zhǎng)度是否大于等于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ù)字和特殊字符,且長(zhǎng)度是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)文章

  • Springboot接收POST請(qǐng)求,數(shù)據(jù)為json類型問題

    Springboot接收POST請(qǐng)求,數(shù)據(jù)為json類型問題

    在使用Spring框架中,當(dāng)處理POST請(qǐng)求且內(nèi)容為JSON類型時(shí),應(yīng)使用@RequestBody注解而非@RequestParam,通過@RequestBody可以將JSON數(shù)據(jù)綁定到一個(gè)Map對(duì)象中,然后通過Map的get方法來獲取需要的參數(shù)
    2022-10-10
  • Java中stream的用法詳細(xì)解讀

    Java中stream的用法詳細(xì)解讀

    這篇文章主要介紹了Java中stream的用法詳細(xì)解讀,Stream 是 Java8 中處理集合的關(guān)鍵抽象概念,它可以指定你希望對(duì)集合進(jìn)行的操作,可以執(zhí)行非常復(fù)雜的查找、過濾和映射數(shù)據(jù)等操作,使用Stream API 對(duì)集合數(shù)據(jù)進(jìn)行操作,就類似于使用SQL執(zhí)行的數(shù)據(jù)庫(kù)查詢,需要的朋友可以參考下
    2023-10-10
  • 使用jpa之動(dòng)態(tài)插入與修改(重寫save)

    使用jpa之動(dòng)態(tài)插入與修改(重寫save)

    這篇文章主要介紹了使用jpa之動(dòng)態(tài)插入與修改(重寫save),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring框架通過工廠創(chuàng)建Bean的三種方式實(shí)現(xiàn)

    Spring框架通過工廠創(chuàng)建Bean的三種方式實(shí)現(xiàn)

    這篇文章主要介紹了Spring框架通過工廠創(chuàng)建Bean的三種方式實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Springboot整合mybatisplus時(shí),使用條件構(gòu)造器排序報(bào)錯(cuò)問題及解決

    Springboot整合mybatisplus時(shí),使用條件構(gòu)造器排序報(bào)錯(cuò)問題及解決

    這篇文章主要介紹了Springboot整合mybatisplus時(shí),使用條件構(gòu)造器排序報(bào)錯(cuò)問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java中Map和Set練習(xí)項(xiàng)目實(shí)例代碼

    Java中Map和Set練習(xí)項(xiàng)目實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Java中Map和Set練習(xí)項(xiàng)目的相關(guān)資料,首先介紹了如何使用map來統(tǒng)計(jì)字符串?dāng)?shù)組中每個(gè)字符串的出現(xiàn)次數(shù),然后討論了如何使用set來找出只出現(xiàn)一次的數(shù)字,最后提出了一個(gè)解決壞鍵盤打字問題的思路,需要的朋友可以參考下
    2024-11-11
  • springboot集成websocket的四種方式小結(jié)

    springboot集成websocket的四種方式小結(jié)

    本文主要介紹了springboot集成websocket的四種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • async-excel實(shí)現(xiàn)多sheet異步導(dǎo)出方法詳解

    async-excel實(shí)現(xiàn)多sheet異步導(dǎo)出方法詳解

    這篇文章主要介紹了async-excel實(shí)現(xiàn)多sheet異步導(dǎo)出方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • SpringBoot實(shí)現(xiàn)elasticsearch索引操作的代碼示例

    SpringBoot實(shí)現(xiàn)elasticsearch索引操作的代碼示例

    這篇文章主要給大家介紹了SpringBoot如何實(shí)現(xiàn)elasticsearch 索引操作,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀下
    2023-07-07
  • JVM類加載機(jī)制原理及用法解析

    JVM類加載機(jī)制原理及用法解析

    這篇文章主要介紹了JVM類加載機(jī)制原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論