From 7e1fa0439bcd2a819895f17a2e9a24db54033b21 Mon Sep 17 00:00:00 2001
From: 101captain <237651143@qq.com>
Date: 星期二, 26 七月 2022 13:25:36 +0800
Subject: [PATCH] bug修改

---
 springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java b/springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java
index 8b7572f..4c660e3 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java
@@ -100,9 +100,18 @@
             return new UsernamePasswordAuthenticationToken(loginUserInfoVO, password, grantedAuthorityList);
         }
         else {
+            boolean flag= redisTemplate.hasKey(LOGIN_FAIL+userName);
+            if(flag){
+                Integer time= (Integer) redisTemplate.opsForValue().get(LOGIN_FAIL+userName);
+                if(time>=5){
+                    redisTemplate.opsForValue().set(LOGIN_FAIL+userName,5, Duration.ofMinutes(5));
+                    throw new LockedException("登录错误超过限制,请五分钟后重试");
+                }
+            }
             // 查询用户是否存在
             R<LoginUserInfoVO> r = userService.getUserInfo(userName);
             if (r.getCode() != 200) {
+                lockLogin(flag,userName);
                 throw new UsernameNotFoundException("该账号不存在");
             }
             LoginUserInfoVO loginUserInfoVO = r.getData();
@@ -114,14 +123,17 @@
                 });
             }
             if (ObjectUtils.isEmpty(loginUserInfoVO.getAccount())) {
+                lockLogin(flag,userName);
                 throw new UsernameNotFoundException("该账号不存在");
             }
             // 我们还要判断密码是否正确,这里我们的密码使用BCryptPasswordEncoder进行加密的
             if (!new BCryptPasswordEncoder().matches(password, loginUserInfoVO.getPassword())) {
+                lockLogin(flag,userName);
                 throw new BadCredentialsException("密码不正确");
             }
             // 还可以加一些其他信息的判断,比如用户账号已停用等判断
             if (loginUserInfoVO.getStatus().intValue() == 2) {
+                lockLogin(flag,userName);
                 throw new LockedException("该用户已被禁用");
             }
             // 维护最后登录时间

--
Gitblit v1.7.1