From c20e9a5dc79a642a1d59a3b4b98c9742fa58125b Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 19 一月 2024 14:04:09 +0800
Subject: [PATCH] 代码提交

---
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java |  104 +++++++++++++++++++++++-----------------------------
 1 files changed, 46 insertions(+), 58 deletions(-)

diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index 3dcc042..6e79b6e 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -3,9 +3,11 @@
 import javax.annotation.Resource;
 
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.exception.user.WxOpenIDNotFindException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.framework.wxopenidConfig.WxOpenIDAuthenticationToken;
+import com.ruoyi.system.mapper.SysUserMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.BadCredentialsException;
@@ -31,12 +33,11 @@
 
 /**
  * 鐧诲綍鏍¢獙鏂规硶
- * 
+ *
  * @author ruoyi
  */
 @Component
-public class SysLoginService
-{
+public class SysLoginService {
     @Autowired
     private TokenService tokenService;
 
@@ -45,47 +46,49 @@
 
     @Autowired
     private RedisCache redisCache;
-    
+
     @Autowired
     private ISysUserService userService;
 
     @Autowired
     private ISysConfigService configService;
 
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
     /**
      * 鐧诲綍楠岃瘉
-     * 
+     *
      * @param username 鐢ㄦ埛鍚�
      * @param password 瀵嗙爜
-     * @param code 楠岃瘉鐮�
-     * @param uuid 鍞竴鏍囪瘑
+     * @param code     楠岃瘉鐮�
+     * @param uuid     鍞竴鏍囪瘑
      * @return 缁撴灉
      */
-    public String login(String username, String password, String code, String uuid, String openId)
-    {
+    public String login(String username, String password, String code, String uuid, String openId) {
+        SysUser sysUser = sysUserMapper.selectUserByUserName(username);
+        if (sysUser.getErrorNums() >= 3) {
+            //鏍¢獙澶辫触娆℃暟
+            throw new BaseException("浣犵殑瀵嗙爜杈撳叆閿欒娆℃暟杩囧锛岃鑱旂郴绠$悊鍛樺鐞�");
+        }
+
         boolean captchaOnOff = configService.selectCaptchaOnOff();
         // 楠岃瘉鐮佸紑鍏�
-        if (captchaOnOff)
-        {
+        if (captchaOnOff) {
             validateCaptcha(username, code, uuid);
         }
         // 鐢ㄦ埛楠岃瘉
         Authentication authentication = null;
-        try
-        {
+        try {
             // 璇ユ柟娉曚細鍘昏皟鐢║serDetailsServiceImpl.loadUserByUsername
-            authentication = authenticationManager
-                    .authenticate(new UsernamePasswordAuthenticationToken(username, password));
-        }
-        catch (Exception e)
-        {
-            if (e instanceof BadCredentialsException)
-            {
+            authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                sysUserMapper.updateErrorNums(sysUser);
                 throw new UserPasswordNotMatchException();
-            }
-            else
-            {
+            } else {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
                 throw new ServiceException(e.getMessage());
             }
@@ -97,52 +100,44 @@
         //鏇存柊openid
         String userOpenId = user.getOpenId();
 
-        if(StringUtils.isEmpty(openId))
-        {
+        if (StringUtils.isEmpty(openId)) {
             recordLoginInfo(loginUser.getUserId());
-        }else
-        {
-            if(StringUtils.isNotEmpty(userOpenId))
-            {
+        } else {
+            if (StringUtils.isNotEmpty(userOpenId)) {
                 //褰撴湰娆$櫥褰曠殑寰俊OPENID涓嶇瓑浜庣涓�娆$粦瀹氱殑寰俊OPENID灏变笉鍏佽鐧诲綍锛岄槻姝㈠悓涓�涓处鍙峰寰俊鐧诲綍
-                if(!userOpenId.equals(openId))
-                {
+                if (!userOpenId.equals(openId)) {
                     AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "璇ヨ处鎴峰凡缁忕粦瀹氬叾浠栬澶囷紝椤诲厛瑙i櫎缁戝畾鍐嶇櫥褰曪紝璇疯窡绯荤粺绠$悊鍛樿仈绯伙紒"));
                     throw new ServiceException("璇ヨ处鎴峰凡缁忕粦瀹氬叾浠栬澶囷紝椤诲厛瑙i櫎缁戝畾鍐嶇櫥褰曪紝璇疯窡绯荤粺绠$悊鍛樿仈绯伙紒");
-                }else
-                {
+                } else {
                     recordLoginInfo(loginUser.getUserId());
                 }
-            }else
-            {
+            } else {
                 recordLoginInfo(loginUser.getUserId(), openId);
             }
         }
-
+        //娓呴櫎澶辫触娆℃暟
+        sysUserMapper.cleanErrorNums(username);
         // 鐢熸垚token
         return tokenService.createToken(loginUser);
     }
 
     /**
      * 鏍¢獙楠岃瘉鐮�
-     * 
+     *
      * @param username 鐢ㄦ埛鍚�
-     * @param code 楠岃瘉鐮�
-     * @param uuid 鍞竴鏍囪瘑
+     * @param code     楠岃瘉鐮�
+     * @param uuid     鍞竴鏍囪瘑
      * @return 缁撴灉
      */
-    public void validateCaptcha(String username, String code, String uuid)
-    {
+    public void validateCaptcha(String username, String code, String uuid) {
         String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
         String captcha = redisCache.getCacheObject(verifyKey);
         redisCache.deleteObject(verifyKey);
-        if (captcha == null)
-        {
+        if (captcha == null) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
             throw new CaptchaExpireException();
         }
-        if (!code.equalsIgnoreCase(captcha))
-        {
+        if (!code.equalsIgnoreCase(captcha)) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
             throw new CaptchaException();
         }
@@ -155,20 +150,15 @@
      * @return 缁撴灉
      */
 
-    public AjaxResult wxopenidLogin(String openid)
-    {
+    public AjaxResult wxopenidLogin(String openid) {
 
         // 鐢ㄦ埛楠岃瘉
         Authentication authentication = null;
-        try
-        {
+        try {
 
             // 璇ユ柟娉曚細鍘昏皟鐢║serDetailsServiceImpl.loadUserByUsername
-            authentication = authenticationManager
-                    .authenticate(new WxOpenIDAuthenticationToken(openid));
-        }
-        catch (Exception e)
-        {
+            authentication = authenticationManager.authenticate(new WxOpenIDAuthenticationToken(openid));
+        } catch (Exception e) {
 
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(openid, Constants.LOGIN_FAIL, e.getMessage()));
             throw new WxOpenIDNotFindException();
@@ -189,8 +179,7 @@
      *
      * @param userId 鐢ㄦ埛ID
      */
-    public void recordLoginInfo(Long userId)
-    {
+    public void recordLoginInfo(Long userId) {
         SysUser sysUser = new SysUser();
         sysUser.setUserId(userId);
         sysUser.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
@@ -199,8 +188,7 @@
     }
 
 
-    public void recordLoginInfo(Long userId, String openId)
-    {
+    public void recordLoginInfo(Long userId, String openId) {
         SysUser sysUser = new SysUser();
         sysUser.setUserId(userId);
         sysUser.setOpenId(openId);

--
Gitblit v1.9.3