From f53755d3756e72d7fd5421b56502b5439764a886 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期三, 19 七月 2023 09:28:40 +0800
Subject: [PATCH] 修改登录验证增加app用户过期token时限

---
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java |   38 ++++++++++++++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java  |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java   |    4 -
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java       |   13 ++++++
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java    |   20 ++++++++--
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java       |   14 +++++++
 6 files changed, 82 insertions(+), 9 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index 736c164..780665c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -54,7 +54,7 @@
         AjaxResult ajax = AjaxResult.success();
         // 鐢熸垚浠ょ墝
         String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
-                loginBody.getUuid());
+                loginBody.getUuid(),loginBody.getApp());
         ajax.put(Constants.TOKEN, token);
         return ajax;
     }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index 4a939ff..c58fd3e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -44,7 +44,6 @@
  * 
  * @author ruoyi
  */
-@Api(tags = "鐢ㄦ埛淇℃伅")
 @RestController
 @RequestMapping("/system/user")
 public class SysUserController extends BaseController
@@ -64,7 +63,7 @@
     /**
      * 鑾峰彇鐢ㄦ埛鍒楄〃
      */
-    @ApiOperation("鑾峰彇鐢ㄦ埛鍒楄〃")
+
     @ApiOperationSupport(includeParameters={"user.userId"})
     @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/list")
@@ -186,7 +185,6 @@
     /**
      * 鍒犻櫎鐢ㄦ埛
      */
-    @ApiOperation(value = "鍒犻櫎鐢ㄦ埛")
     @PreAuthorize("@ss.hasPermi('system:user:remove')")
     @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.DELETE)
     @DeleteMapping("/{userIds}")
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
index b5bc8c8..3d6e809 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
@@ -27,6 +27,20 @@
      */
     private String uuid;
 
+    /**
+     * 鏄惁APP鐢ㄦ埛
+     */
+    private Boolean isApp;
+
+
+    public Boolean getApp() {
+        return isApp;
+    }
+
+    public void setApp(Boolean app) {
+        isApp = app;
+    }
+
     public String getUsername()
     {
         return username;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
index 2fefaa0..c2a07d4 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
@@ -71,6 +71,19 @@
      */
     private SysUser user;
 
+    /**
+     *  鏄惁app鐢ㄦ埛
+     */
+    private Boolean isApp;
+
+    public Boolean getIsApp() {
+        return isApp;
+    }
+
+    public void setIsApp(Boolean isApp) {
+        this.isApp = isApp;
+    }
+
     public String getUserId()
     {
         return userId;
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 78d2213..cd67a89 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
@@ -95,7 +95,43 @@
         getRongCloudToken(loginUser);
         return token;
     }
-
+    public String login(String username, String password, String code, String uuid,Boolean isApp) {
+        boolean captchaEnabled = configService.selectCaptchaEnabled();
+        // 楠岃瘉鐮佸紑鍏�
+        if (captchaEnabled) {
+            validateCaptcha(username, code, uuid);
+        }
+        // 鐢ㄦ埛楠岃瘉
+        Authentication authentication = null;
+        try {
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
+            AuthenticationContextHolder.setContext(authenticationToken);
+            // 璇ユ柟娉曚細鍘昏皟鐢║serDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager.authenticate(authenticationToken);
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            } else {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        } finally {
+            AuthenticationContextHolder.clearContext();
+        }
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        recordLoginInfo(loginUser.getUserId());
+        // 鐢熸垚token
+        if(StringUtils.isNotNull(isApp))
+        {
+            loginUser.setIsApp(isApp);
+        }
+        String token = tokenService.createToken(loginUser);
+        //鑾峰彇铻嶄簯token
+        getRongCloudToken(loginUser);
+        return token;
+    }
     /**
      * 鏍¢獙楠岃瘉鐮�
      *
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
index 3d41241..f4bfa37 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
@@ -142,10 +142,22 @@
     public void refreshToken(LoginUser loginUser)
     {
         loginUser.setLoginTime(System.currentTimeMillis());
-        loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
-        // 鏍规嵁uuid灏唋oginUser缂撳瓨
-        String userKey = getTokenKey(loginUser.getToken());
-        redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
+        if(StringUtils.isNull(loginUser.getIsApp()))
+        {
+
+            loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
+            // 鏍规嵁uuid灏唋oginUser缂撳瓨
+            String userKey = getTokenKey(loginUser.getToken());
+            redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
+        }
+        else
+        {
+            loginUser.setExpireTime(loginUser.getLoginTime() + 365*24*60 * MILLIS_MINUTE);
+            // 鏍规嵁uuid灏唋oginUser缂撳瓨
+            String userKey = getTokenKey(loginUser.getToken());
+            redisCache.setCacheObject(userKey, loginUser, 365*24*60, TimeUnit.MINUTES);
+        }
+
     }
 
     /**

--
Gitblit v1.9.3