密码错误冻结时间,强制修改密码时间,密码强度,首次登录是否修改密码

2024-04-24 05:44

本文主要是介绍密码错误冻结时间,强制修改密码时间,密码强度,首次登录是否修改密码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

新建单表,各种字段,项目启动时加载到redis缓存中。问题:修改数据后,缓存中数据未修改?是否设置超时时间,每次登录的时候判断缓存中有没有,没有新增一次,有了就用缓存中数据?

1、java 应用启动时将数据加入到缓存中

@PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。

  • 只有一个非静态方法能使用此注解;
  • 被注解的方法不得有任何参数;
  • 被注解的方法返回值必须为void;
  • 被注解方法不得抛出已检查异常;
  • 此方法只会被执行一次;
/*** 应用启动时将数据加入到缓存中*/@PostConstructpublic void loadDlpzglIntoRedis() {QueryWrapper<SysDlpzgl> queryWrapper = new QueryWrapper<>();queryWrapper.eq("sfsc", "N");SysDlpzgl sysDlpzgl = sysDlpzglService.getOne(queryWrapper);// 缓存数据到Redislog.info("登录配置管理存储字典到redis" + sysDlpzgl.toString());redisUtil.set(DLPZGL, sysDlpzgl);}

2、判断是否开启首次登录修改密码

.....
...
..
//判断是否开启首次登录修改密码if ("1".equals(sysDlpzgl.getSfkqscdlxgmm()) && isFirstLogin(username)){return result.error500("首次登录请修改密码!");}
.......
.....
.../*** 首次登录是否修改密码* @return*/private boolean isFirstLogin(String username) {SysUser user = sysUserService.getUserByName(username);Date zhmmzhxgsj = user.getZhmmzhxgsj();//账号密码最后一次修改时间Date createTime = user.getCreateTime();//获取距离最后一次密码修改的时间,天数//long day = DateUtil.betweenDay(createTime, zhmmzhxgsj, false);//判断两个时间是否相等if (!createTime.equals(zhmmzhxgsj)) {return false;} else {return true;}}

3、检查用户密码是否为弱口令,密码强度

@GetMapping("/isWeakPassword")private Result<String> isWeakPasswordInterface(String encodePassword) throws Exception {SysDlpzgl sysDlpzgl = (SysDlpzgl) redisUtil.get("dlpzgl");//解密密文密码String password = new String(RSAUtils.decryptByPrivateKey(encodePassword, privateKey));Map<String, Object> resMap = new HashMap<>();boolean isWeak = false;Map<String, String> map = new HashMap<String, String>();String message = "密码不符合规范:";int dxzmNum = 0;int xxzmNum = 0;int szNum = 0;int tszfNum = 0;for (int i = 0; i < password.length(); i++) {int A = password.charAt(i);if (A >= 48 && A <= 57) {// 数字map.put("数字", "数字");szNum++;} else if (A >= 65 && A <= 90) {// 大写map.put("大写", "大写");dxzmNum++;} else if (A >= 97 && A <= 122) {// 小写map.put("小写", "小写");xxzmNum++;} else {map.put("特殊", "特殊");tszfNum++;}}int pwdLength = password.length();// 密码长度if (pwdLength <= Integer.parseInt(sysDlpzgl.getMmzxcd()) || pwdLength >= Integer.parseInt(sysDlpzgl.getMmzdcd())){message += "密码长度不符合规定!";return Result.error(500, message);}//如果开启包含大写字母if ("1".equals(sysDlpzgl.getSfbhdxzm())){//如果没有大写字母if (!"大写".equals(map.get("大写"))){message += "密码中不包含大写字母!";return Result.error(500, message);}//判断大写字母个数if (dxzmNum<Integer.parseInt(sysDlpzgl.getDxzmzsgs())){message += "密码中包含大写字母个数少于设定值!";return Result.error(500, message);}}//如果开启包含小写字母if ("1".equals(sysDlpzgl.getSfbhxxzm())){if (!"小写".equals(map.get("小写"))){message += "密码中不包含小写字母!";return Result.error(500, message);}if (xxzmNum<Integer.parseInt(sysDlpzgl.getXxzmzsgs())){message += "密码中包含小写字母个数少于设定值!";return Result.error(500, message);}}if ("1".equals(sysDlpzgl.getSfbhsz())){if (!"数字".equals(map.get("数字"))){message += "密码中不包含数字!";return Result.error(500, message);}if (szNum<Integer.parseInt(sysDlpzgl.getSzzsgs())){message += "密码中包含数字个数少于设定值!";return Result.error(500, message);}}if ("1".equals(sysDlpzgl.getSfbhtszf())){if (!"特殊".equals(map.get("特殊"))){message += "密码中不包含特殊!";return Result.error(500, message);}if (tszfNum<Integer.parseInt(sysDlpzgl.getTszfzsgs())){message += "密码中包含特殊字符个数少于设定值!";return Result.error(500, message);}}//判断字符串大写字母连续个数小写字母连续个数数字连续个数特殊字符连续个数int[] counts = countConsecutiveCharacters(password);for (int count : counts) {if (count > Integer.parseInt(sysDlpzgl.getTlxlxgs())){message += "密码中同类型连续个数大于设定值!";return Result.error(500, message);}}return Result.OK("密码符合规范!");//Set<String> sets = map.keySet();//int pwdSize = sets.size();// 密码字符种类数//int pwdLength = password.length();// 密码长度//if (pwdSize == 4 && pwdLength >= 6) {//    return Result.OK("密码符合规范!");//} else {//    if (!"数字".equals(map.get("数字"))) {//        message += "密码中不包含数字!";//        return Result.error(500, message);// 弱密码//    } else if (!"大写".equals(map.get("大写"))) {//        message += "密码中不包含大写字母!";//        return Result.error(500, message);// 弱密码//    } else if (!"小写".equals(map.get("小写"))) {//        message += "密码中不包含小写字母!";//        return Result.error(500, message);// 弱密码//    } else if (!"特殊".equals(map.get("特殊"))) {//        message += "密码中不包含特殊字符!";//        return Result.error(500, message);// 弱密码//    } else {//        return Result.error(500, message);// 弱密码//    }//}}

4、判断字符串大写字母连续个数小写字母连续个数数字连续个数特殊字符连续个数

/***  判断字符串大写字母连续个数小写字母连续个数数字连续个数特殊字符连续个数* @param input* @return*/public int[] countConsecutiveCharacters(String input) {String upperCasePattern = "[A-Z]+";String lowerCasePattern = "[a-z]+";String digitPattern = "\\d+";String specialCharPattern = "[^A-Za-z0-9]+";Pattern upperCaseMatcher = Pattern.compile(upperCasePattern);Pattern lowerCaseMatcher = Pattern.compile(lowerCasePattern);Pattern digitMatcher = Pattern.compile(digitPattern);Pattern specialCharMatcher = Pattern.compile(specialCharPattern);Matcher matcher;String type;int[] counts = new int[4];matcher = upperCaseMatcher.matcher(input);while (matcher.find()) {type = "Uppercase";counts[0] = matcher.group().length();System.out.println(type + " consecutive characters: " + counts[0]);}matcher = lowerCaseMatcher.matcher(input);while (matcher.find()) {type = "Lowercase";counts[1] = matcher.group().length();System.out.println(type + " consecutive characters: " + counts[1]);}matcher = digitMatcher.matcher(input);while (matcher.find()) {type = "Digit";counts[2] = matcher.group().length();System.out.println(type + " consecutive characters: " + counts[2]);}matcher = specialCharMatcher.matcher(input);while (matcher.find()) {type = "Special Character";counts[3] = matcher.group().length();System.out.println(type + " consecutive characters: " + counts[3]);}return counts;}

5、检查用户最后一次密码修改时间是否在规定时间内

/*检查用户最后一次密码修改时间是否在规定时间内*/private boolean isCheckPasswordExpire(SysUser sysUser) {Date zhmmzhxgsj = sysUser.getZhmmzhxgsj();
//        获取距离最后一次密码修改的时间,天数long day = DateUtil.betweenDay(zhmmzhxgsj, new Date(), false);SysDlpzgl sysDlpzgl = (SysDlpzgl) redisUtil.get("dlpzgl");int changeDay = Integer.parseInt(sysDlpzgl.getQzxgmmsj());if (day > changeDay) {return true;} else {return false;}}

系统增加登录管理,可配置,密码错误冻结时间,强制修改密码时间,密码强度,首次登录是否修改密码等

这篇关于密码错误冻结时间,强制修改密码时间,密码强度,首次登录是否修改密码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/930900

相关文章

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级