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

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

相关文章

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

Mac excel 同时冻结首行和首列

1. 选择B2窗格 2. 选择视图 3. 选择冻结窗格 最后首行和首列的分割线加粗了就表示成功了

JavaScript全屏,监听页面是否全屏

在JavaScript中,直接监听浏览器是否进入全屏模式并不直接支持,因为全屏API主要是关于请求和退出全屏模式的,而没有直接的监听器可以告知页面何时进入或退出全屏模式。但是,你可以通过在你的代码中跟踪全屏状态的改变来模拟这个功能。 以下是一个基本的示例,展示了如何使用全屏API来请求全屏模式,并在请求成功或失败时更新一个状态变量: javascriptlet isInFullscreen =

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

20170723 做的事 ecdsa的签名验证时间短于bls signature

1 今天在虚拟机 /home/smile/Desktop/20170610/Test//time_ecdsa 文件夹下,找到ecdsa的验证时间是 989.060606μs μs 先 make ,然后run。 再取BLS的签名生成时间: ./run  2  gnuplot 画图,画对比的时间 gnuplot 画图参考教程 http://blog.sciencen

智慧环保一体化平台登录

据悉,在当今这个数字化、智能化的时代,环境保护工作也需要与时俱进,不断创新。朗观视觉智慧环保一体化平台应运而生,它利用先进的信息技术手段,为环保工作提供了更加便捷、高效的管理方式,成为推动绿色发展的重要力量。 一、智慧环保一体化平台的诞生背景 随着工业化进程的加快,环境污染问题日益严重,传统的环保管理模式已经难以满足现代社会的需求。为了提高环保工作的效率和质量,智慧环保一体化平台应运而

开启青龙 Ninja 扫码功能失效后修改成手动填写CK功能【修正Ninja拉库地址】

国内:进入容器docker exec -it qinglong bash #获取ninjagit clone -b main https://ghproxy.com/https://github.com/wjx0428/ninja.git /ql/ninja#安装cd /ql/ninja/backend && pnpm install cp .env.example .env