Ver código fonte

用户权限

PC 2 anos atrás
pai
commit
2a89d82385

+ 29 - 9
sckw-auth/src/main/java/com/sckw/auth/service/impl/IndexServiceImpl.java

@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.*;
 
 @Slf4j
 @Service
@@ -100,15 +101,10 @@ public class IndexServiceImpl implements IIndexService {
             loginResVo.setToken(token);
             RedissonUtils.add(CacheGroup.LOGININFO + id, JSON.toJSONString(loginResVo));
 
-            //存权限菜单
-            List<UserAccessMenuInfoResDto> userAccessMenuInfo = remoteUserService.queryUserAccessMenu(loginResVo.getId());
-            List<String> strings = new ArrayList<>();
-            for (UserAccessMenuInfoResDto userAccessMenuInfoResDto : userAccessMenuInfo) {
-                List<String> strings1 = Arrays.asList(userAccessMenuInfoResDto.getLinks().split(","));
-                strings.addAll(strings1);
-            }
-            boolean b = RedissonUtils.putSet(CacheGroup.ACCESSMENU + id, strings);
-//            RedissonUtils.add(CacheGroup.ACCESSMENU + id, JSON.toJSONString(userAccessMenuInfo));
+            //异步存redis
+            ExecutorService executorService = new ThreadPoolExecutor(10, 20, 500L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+            executorService.submit(new SaveMenuInfo(loginResVo.getId()));
+
         } catch (Exception e) {
             throw new SystemException(HttpStatus.GLOBAL_EXCEPTION_CODE, HttpStatus.GLOBAL_EXCEPTION_MESSAGE);
         }
@@ -119,4 +115,28 @@ public class IndexServiceImpl implements IIndexService {
         remoteUserService.register(reqDto);
     }
 
+
+    class SaveMenuInfo implements Runnable{
+        private long id;
+        public SaveMenuInfo(long id) {
+            this.id = id;
+        }
+
+        @Override
+        public void run() {
+            //存权限菜单
+            List<UserAccessMenuInfoResDto> userAccessMenuInfo = remoteUserService.queryUserAccessMenu(id);
+            if (CollectionUtils.isEmpty(userAccessMenuInfo)) {
+                log.error("未查询到用户{}的菜单权限", id);
+                return;
+            }
+
+            List<String> menus = new ArrayList<>();
+            for (UserAccessMenuInfoResDto userAccessMenuInfoResDto : userAccessMenuInfo) {
+                menus.addAll(Arrays.asList(userAccessMenuInfoResDto.getLinks().split(",")));
+            }
+            RedissonUtils.putSet(CacheGroup.ACCESSMENU + id, menus);
+        }
+    }
+
 }

+ 18 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/config/CustomConfig.java

@@ -0,0 +1,18 @@
+package com.sckw.core.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author czh
+ * @desc 自定义配置类
+ * @date 2023/6/16
+ */
+@Data
+@Component
+public class CustomConfig {
+
+    @Value("${links}")
+    private String links;
+}

+ 17 - 23
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilter.java

@@ -1,11 +1,10 @@
 package com.sckw.core.filter;
 
 import com.alibaba.fastjson.JSONObject;
+import com.sckw.core.config.CustomConfig;
 import com.sckw.core.exception.SystemException;
-import com.sckw.core.model.auth.UserAccessMenuInfo;
 import com.sckw.core.model.constant.CacheGroup;
 import com.sckw.core.model.constant.Global;
-import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.EncryUtil;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
@@ -13,8 +12,11 @@ import com.sckw.core.web.constant.RequestConstant;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.model.LoginUserInfo;
 import com.sckw.redis.utils.RedissonUtils;
+import jakarta.annotation.PostConstruct;
 import jakarta.servlet.*;
 import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
@@ -33,11 +35,19 @@ public class LoginFilter implements Filter {
 
     private static final List<String> EXCLUDEPATH = new ArrayList<>();
 
-    static {
-        EXCLUDEPATH.add("/auth/login");
-        EXCLUDEPATH.add("/kwsUser/resetPassword");
-        EXCLUDEPATH.add("/kwsUser/updatePassword");
-        EXCLUDEPATH.add("/kwsUser/forgetPassword");
+    @Autowired
+    CustomConfig customConfig;
+
+    /**
+     * @desc: 初始化放行路径
+     * @author: czh
+     */
+    @PostConstruct
+    private void initExcludePath() {
+        String links = customConfig.getLinks();
+        if (StringUtils.isNotBlank(links)) {
+            EXCLUDEPATH.addAll(Arrays.asList(links.split(",")));
+        }
     }
 
     @Override
@@ -89,20 +99,4 @@ public class LoginFilter implements Filter {
         }
     }
 
-    private List<String> getMenus(String key) {
-        List<String> links = new ArrayList<>();
-        Object menuObject = RedissonUtils.get(CacheGroup.ACCESSMENU + key);
-        if (!Objects.isNull(menuObject)) {
-            List<UserAccessMenuInfo> userAccessMenuInfos = JSONObject.parseArray(menuObject.toString(), UserAccessMenuInfo.class);
-            if (!CollectionUtils.isEmpty(userAccessMenuInfos)) {
-                for (UserAccessMenuInfo userAccessMenuInfo : userAccessMenuInfos) {
-                    String links1 = userAccessMenuInfo.getLinks();
-                    links.addAll(Arrays.asList(links1.split(",")));
-                }
-            }
-        }
-        links.add("/kwsMenu/add");
-        return links;
-    }
-
 }

+ 0 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteUserServiceImpl.java

@@ -1,6 +1,5 @@
 package com.sckw.system.dubbo;
 
-import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.system.api.RemoteUserService;

+ 3 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java

@@ -4,6 +4,7 @@ import java.util.*;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.constant.CacheGroup;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
@@ -12,6 +13,8 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.redis.utils.RedissonUtils;
+import com.sckw.system.api.model.dto.res.UserAccessMenuInfoResDto;
 import com.sckw.system.dao.*;
 import com.sckw.system.model.*;
 import com.sckw.system.model.pojo.FindMenuTreePojo;