From ede2289eb8fb676632a7783fece32507f8bd3dd7 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 13 二月 2025 17:26:50 +0800
Subject: [PATCH] 权限修改

---
 ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java |   22 +++++++++++++++++-----
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java                      |    2 ++
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java             |    4 ++--
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java                        |    1 +
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java                     |   19 +++++++++++++++++--
 5 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
index f6158e2..562b8fe 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
@@ -128,6 +128,8 @@
             tenant.setAccount(appletUserDecodeData.getPhoneNumber());
             tenant.setPassword(SecurityUtils.encryptPassword(appletUserDecodeData.getPhoneNumber().substring(5)));
             tenant.setOpenId(appletUserDecodeData.getOpenId());
+            // 手机号中间四位替换为*
+            tenant.setResidentName(appletUserDecodeData.getPhoneNumber().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
             tTenantService.save(tenant);
         }
         LoginUserApplet loginUserApplet = new LoginUserApplet();
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java
index ae4b66e..57a4ff0 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java
@@ -56,7 +56,7 @@
                     //注入创建时间
                     if ("createTime".equals(field.getName())) {
                         field.setAccessible(true);
-                        field.set(parameter, new Date());
+//                        field.set(parameter, new Date());
                         field.setAccessible(false);
                     } 
                 } catch (Exception e) {
@@ -79,7 +79,7 @@
                     }
                     if ("updateTime".equals(field.getName())) {
                         field.setAccessible(true);
-                        field.set(parameter, new Date());
+//                        field.set(parameter, new Date());
                         field.setAccessible(false);
                     }
                 } catch (Exception e) {
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index 1a4e0fa..5f90047 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -118,6 +118,7 @@
                         "/applet/changepwd", "/captchaImage","/getCode","/loginCode",
                         "/operations/getBySingleNum/**",
                         "/user/getUserInfoByNumber/**",
+                        "/wxLogin/**",
                         "/open/**"
                 ).permitAll()
                 // 静态资源,可匿名访问
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
index 3eb2495..9015708 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
@@ -5,6 +5,8 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.core.domain.model.LoginUserApplet;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -32,12 +34,22 @@
             throws ServletException, IOException
     {
         LoginUser loginUser = tokenService.getLoginUser(request);
-        if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
+        LoginUserApplet applet = tokenService.getLoginUserApplet(request);
+        if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())||
+                StringUtils.isNotNull(applet))
         {
-            tokenService.verifyToken(loginUser);
-            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
-            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
-            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+            if (StringUtils.isNotNull(loginUser)){
+                tokenService.verifyToken(loginUser);
+                UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
+                authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
+                SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+            }
+            if (StringUtils.isNotNull(applet)){
+                tokenService.verifyTokenApplet(applet);
+                UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(applet, null, applet.getAuthorities());
+                authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
+                SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+            }
         }
         chain.doFilter(request, response);
     }
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 9bed984..51fb581 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
@@ -108,7 +108,7 @@
      *
      * @return 用户信息
      */
-    public LoginUser getLoginUserApplet(HttpServletRequest request)
+    public LoginUserApplet getLoginUserApplet(HttpServletRequest request)
     {
         // 获取请求携带的令牌
         String token = getToken(request);
@@ -120,7 +120,7 @@
                 // 解析对应的权限以及用户信息
                 String uuid = (String) claims.get(Constants.LOGIN_USER_APPLET_KEY);
                 String userKey = getTokenKey(uuid);
-                LoginUser user = redisCache.getCacheObject(userKey);
+                LoginUserApplet user = redisCache.getCacheObject(userKey);
                 return user;
             }
             catch (Exception e)
@@ -204,6 +204,21 @@
             refreshToken(loginUser);
         }
     }
+    /**
+     * 小程序验证令牌有效期,相差不足20分钟,自动刷新缓存
+     *
+     * @param loginUser
+     * @return 令牌
+     */
+    public void verifyTokenApplet(LoginUserApplet loginUser)
+    {
+        long expireTime = loginUser.getExpireTime();
+        long currentTime = System.currentTimeMillis();
+        if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
+        {
+            refreshTokenApplet(loginUser);
+        }
+    }
 
     /**
      * 刷新令牌有效期

--
Gitblit v1.7.1