Java实现登录密码强度校验的项目实践
更新时间:2024年01月25日 15:05:35 作者:道小生
本文主要介绍了Java实现登录密码强度校验的项目实践,包括使用正则表达式匹配校验和密码强度校验工具类这两种方法,具有一定的参考价值,感兴趣的可以了解一下
方式1:使用正则表达式匹配校验
- 不同规则表达式
- 密码必须包含大写、小写、数字和特殊字符,且长度是8位以上
private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,}$";
- 密码必须包含大写、小写、数字和特殊字符,且长度是8-32位
private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,32}$";
- 密码是8-16位字母和数字的组合
private static final String PWD_REGEX = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";
可以根据自己的使用需求,自己组合
- 使用
public class CheckPwdUtil {
/**
* 密码必须包含大写、小写、数字和特殊字符,且长度是8位以上
*/
private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,}$";
/**
* 密码复杂度校验
* @param password 密码
* @return 校验密码强度是否合格 true/false
*/
public static boolean isStrongPassword(String password) {
if (StringUtils.isBlank(password)) {
return false;
}
return password.matches(PWD_REGEX);
}
}
方式2:密码强度校验工具类
- 工具类
public class CheckPwdUtil {
private CheckPwdUtil(){}
/**
* 密码等级枚举
* 这里可以根据实际业务需求,扩展更多等级
* 例如:EASY, MIDIUM, STRONG, VERY_STRONG等
*/
public enum PASSWD_LEVEL {
EASY, STRONG
}
/**
* NUM 数字
* 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;
/**
* 获得密码强度等级,包括EASY、STRONG
* @param passwd 密码
* @return 密码等级枚举
*/
public static PASSWD_LEVEL getPasswordLevel(String passwd) {
int level = check(passwd);
/**
* 这里可以根据业务需求,判断不同的level来区分多级密码强度
* 例如:
* 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;
}
}
/**
* 检查密码的强度
*
* @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++;
}
//判断密码是否含有数字 有level++
if (countLetter(passwd, NUM) > 0) {
level++;
}
//判断密码是否含有小写字母 有level++
if (countLetter(passwd, SMALL_LETTER) > 0) {
level++;
}
//判断密码是否还有大写字母 有level++
if (countLetter(passwd, CAPITAL_LETTER) > 0) {
level++;
}
//判断密码是否还有特殊字符 有level++
if (countLetter(passwd, OTHER_CHAR) > 0) {
level++;
}
return level;
}
/**
* 计算密码中指定字符类型的数量
*
* @param passwd 密码
* @param type 类型
* @return 数量
*/
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 接口统一返回
*/
public Result signIn(Param param) {
// 其他逻辑
......
if (CheckPwdUtil.PASSWD_LEVEL.EASY.equals(CheckPwdUtil.getPasswordLevel(param.getPassword()))) {
return new Err<>("密码必须包含大写字母、小写字母、数字和特殊字符,且长度是8位以上");
}
// 其他逻辑
......
}
以上两种方式都可实现密码强度校验,可根据自身业务需要选择使用。
到此这篇关于Java实现登录密码强度校验的项目实践的文章就介绍到这了,更多相关Java 登录密码强度校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Springboot接收POST请求,数据为json类型问题
在使用Spring框架中,当处理POST请求且内容为JSON类型时,应使用@RequestBody注解而非@RequestParam,通过@RequestBody可以将JSON数据绑定到一个Map对象中,然后通过Map的get方法来获取需要的参数2022-10-10
Springboot整合mybatisplus时,使用条件构造器排序报错问题及解决
这篇文章主要介绍了Springboot整合mybatisplus时,使用条件构造器排序报错问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-04-04
SpringBoot实现elasticsearch索引操作的代码示例
这篇文章主要给大家介绍了SpringBoot如何实现elasticsearch 索引操作,文中有详细的代码示例,感兴趣的同学可以参考阅读下2023-07-07


最新评论