互动
最近评论
正在加载中...

前天和朋友自驾去了宝泉,还一起烧烤了,感觉真的是太爽了!!!

抢到张杰郑州演唱会门票喽!!!

现在真是乱穿衣的季节阿,早上看到了穿短袖的,旁边就是穿小袄的

Java+redis,满足输入错误次数锁定账号

// 解析 JWT 获取用户 ID
Claims authorization = new JwtTokenUtil().parseToken(request.getHeader("authorization"));
Integer userId = Integer.parseInt(authorization.getSubject());

// Redis Key 的构建,存储格式为 "user:failed_attempts:{userId}"
String redisKey = "user:failed_attempts:" + userId;

// 检查 Redis 中是否有该用户的查询失败记录
String failedAttemptsStr = (String) redisService.get(redisKey);
Integer failedAttempts = failedAttemptsStr != null ? Integer.parseInt(failedAttemptsStr) : null;

if (failedAttempts != null && failedAttempts >= 5) {
    // 如果失败次数达到5次,返回锁定信息
    Long remainingTime = redisService.getExpire(redisKey, TimeUnit.MINUTES);
    return ResultData.fail("500","查询失败,次数已达上限,请在 " + remainingTime + " 分钟后再试。");
}

// 构建查询条件
QueryWrapper<ASchoolMessagePeople> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("leader_group_id_card", idCard)
        .or()
        .eq("advisor_teacher_card", idCard)
        .or()
        .eq("competition_people_card", idCard);

// 查询数据库
List<ASchoolMessagePeople> schoolMessagePeople = schoolMessagePeopleMapper.selectList(queryWrapper);

if (CollectionUtils.isEmpty(schoolMessagePeople)) {
    // 如果没有查到信息,更新 Redis 中的失败记录
    if (failedAttempts == null) {
        failedAttempts = 1;
    } else {
        failedAttempts++;
    }

    redisService.set(redisKey, String.valueOf(failedAttempts), 30, TimeUnit.MINUTES);

    int remainingAttempts = 5 - failedAttempts;
    return ResultData.fail("500","未找到相关信息,您还可以尝试 " + remainingAttempts + " 次。");
}

// 查询成功,删除 Redis 中的失败记录
if (failedAttempts != null) {
    redisService.delete(redisKey);
}

高木同学为什么会这样子对西片阿呜呜呜我好酸,我也好想遇到属于我的高木同学阿 TAT

上周抽中了个halo周边,发过来发现是个本子和两个不知道叫什么的圆饼

rmdir /s 文件夹名

cmd强制删除文件夹

学习底层源码 刷题的解析 面试八股文

https://github.com/doocs

Java 运算符——&,&& (AND) || (OR) 逻辑运算符

昨天和朋友们度过了一个十分快乐的周末!!!

五一过的好快啊,今天好困啊

发现一个list对象根据指定字段去重的代码,因为没太理解,所有就不写文章写在这里记录了

单独的方法

static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
    Map<Object,Boolean> seen = new ConcurrentHashMap<>();
    //putIfAbsent方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则依旧为原来的值。
    //如果返回null表示添加数据成功(不重复),不重复(null==null :TRUE)
    return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}

使用

List<PlantEExam> newList = new ArrayList<>();
plantEExams.stream().filter(distinctByKey(PlantEExam::getExamId)) //filter保留true的值
        .forEach(newList::add);

plantEExams是需要去重的集合

眼泪女王真的越看越好看,第五集直接就让我水元素充盈了阿TAT

互联网公司常用框架源码赏析

读尽天下源码,心中自然无码 (gitee.io)

空谈误国,实干兴邦

你好呀我的朋友
很高兴见到你
欢迎来到我的博客
第一次装机  成功一次点亮✌
随机查询数据库数据
SPI和API的异同与使用
TypeScript基本语法使用
Java关于文件工具类(持续更新)
为什么数据库存男女要存01而不是直接存汉字
Java BigDecimal 的舍入模式(RoundingMode)详解
记录一次在手动分页中用Math.min()避免数组越界错误
你好啊!
avatar
avatar

你好呀
很高兴可以在这里见到你
接下来
就让我们一起学习进步吧!

小板报
音乐天地
最新评论
文章数 :
26
访问量 :
3927
建站天数 :
2024-04-13
引用到评论