From 15e7d7914452cb21646034e428d0bbf734d35edb Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期二, 29 八月 2023 11:47:37 +0800
Subject: [PATCH] 修改

---
 user-server/src/main/resources/mapper/RoleManangeMapper.xml                                             |    4 +
 framework/src/main/java/com/yuanchu/limslaboratory/utils/MyClassUtil.java                               |   62 +++++++++++++++
 user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java               |    7 +
 sys/src/main/java/com/yuanchu/limslaboratory/commandLineRunner/ResolutionRequestsCommandLineRunner.java |  107 ++++++++++++++++++++++++++
 user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java                       |    2 
 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/MapHandlerRoleDto.java                    |   18 ++++
 framework/src/main/java/com/yuanchu/limslaboratory/annotation/AuthHandler.java                          |   20 +++-
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java         |    7 +
 user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java           |    3 
 9 files changed, 225 insertions(+), 5 deletions(-)

diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/annotation/AuthHandler.java b/framework/src/main/java/com/yuanchu/limslaboratory/annotation/AuthHandler.java
index 086b681..b9af4b9 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/annotation/AuthHandler.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/annotation/AuthHandler.java
@@ -1,15 +1,13 @@
 package com.yuanchu.limslaboratory.annotation;
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+import java.lang.annotation.*;
 
 /**
  * @author 寮犲
  */
 @Target({ElementType.METHOD, ElementType.TYPE})
 @Retention(RetentionPolicy.RUNTIME)
+@Documented
 public @interface AuthHandler {
 
     /**
@@ -18,11 +16,23 @@
      */
     int type() default 0;
 
-
     /**
      * 鎺ュ彛鍚�
      * @return
      */
     String name() default "";
 
+    /**
+     * 鑿滃崟id
+     * @return
+     */
+    String menuId() default "";
+
+    /**
+     * 鏄惁闇�瑕佹坊鍔犳暟鎹簱
+     * @return
+     */
+    boolean isAdd() default false;
+
+
 }
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyClassUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyClassUtil.java
new file mode 100644
index 0000000..976a27a
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyClassUtil.java
@@ -0,0 +1,62 @@
+package com.yuanchu.limslaboratory.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ClassUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.io.File;
+import java.net.JarURLConnection;
+import java.net.URL;
+
+/**
+ * @author 寮犲
+ */
+@Component
+@Slf4j
+public class MyClassUtil {
+
+    private final static String RESOURCE_PATTERN = "/**/*.class";
+
+    /**
+     * 閫氳繃鍖呭悕鑾峰彇椤圭洰鍖呬笅鎵�鏈夌被
+     *
+     * @param BASE_PACKAGE 鍖呭悕
+     * @return
+     */
+    public static List<Class<?>> getClassList(String BASE_PACKAGE) {
+        List<Class<?>> classes = new ArrayList<>();
+        //spring宸ュ叿绫伙紝鍙互鑾峰彇鎸囧畾璺緞涓嬬殑鍏ㄩ儴绫�
+        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
+        try {
+            String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
+                    ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + RESOURCE_PATTERN;
+            Resource[] resources = resourcePatternResolver.getResources(pattern);
+            //MetadataReader 鐨勫伐鍘傜被
+            MetadataReaderFactory readerfactory = new CachingMetadataReaderFactory(resourcePatternResolver);
+            for (Resource resource : resources) {
+                //鐢ㄤ簬璇诲彇绫讳俊鎭�
+                MetadataReader reader = readerfactory.getMetadataReader(resource);
+                //鎵弿鍒扮殑class
+                String classname = reader.getClassMetadata().getClassName();
+                log.info("classname={}", classname);
+                Class<?> clazz = Class.forName(classname);
+                classes.add(clazz);
+            }
+        } catch (Exception e) {
+            log.error("鑾峰彇class寮傚父:", e);
+        }
+        return classes;
+    }
+}
\ No newline at end of file
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
index 7d0ee78..326a40c 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
@@ -117,6 +117,7 @@
 
     @ApiOperation(value = "鏂板妫�楠屽崟")
     @PostMapping("/addInspect")
+    @AuthHandler
     public Result addInspect(@RequestHeader("token") String token, @Validated @RequestBody InspectionVo inspectionVo) throws Exception {
         Object object = RedisUtil.get(token);
         Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
@@ -128,12 +129,14 @@
             @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true)
     })
     @GetMapping("/selectInspectsListById")
+    @AuthHandler
     public Result selectInspectsListById(Integer id) {
         return Result.success(inspectionService.selectInspectsListById(id));
     }
 
     @ApiOperation(value = "閫夋嫨妫�楠岄」鐩殑璐d换浜�")
     @GetMapping("/selectUser")
+    @AuthHandler
     public Result selectUser() {
         return Result.success(userMapper.selectUser());
     }
@@ -144,6 +147,7 @@
             @ApiImplicitParam(name = "userProId", value = "璐d换浜篿d", dataTypeClass = Integer.class, required = true)
     })
     @GetMapping("/chooseUseProId")
+    @AuthHandler
     public Result chooseUseProId(Integer id, Integer userProId) {
         return Result.success(inspectionService.chooseUseProId(id, userProId));
     }
@@ -153,10 +157,13 @@
             @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true)
     })
     @PostMapping("/delInspect")
+    @AuthHandler
     public Result delInspect(Integer id) {
         return Result.success(inspectionService.delInspect(id));
     }
 
 
+
+
 }
 
diff --git a/sys/src/main/java/com/yuanchu/limslaboratory/commandLineRunner/ResolutionRequestsCommandLineRunner.java b/sys/src/main/java/com/yuanchu/limslaboratory/commandLineRunner/ResolutionRequestsCommandLineRunner.java
new file mode 100644
index 0000000..2ca5b77
--- /dev/null
+++ b/sys/src/main/java/com/yuanchu/limslaboratory/commandLineRunner/ResolutionRequestsCommandLineRunner.java
@@ -0,0 +1,107 @@
+package com.yuanchu.limslaboratory.commandLineRunner;
+
+import com.yuanchu.limslaboratory.annotation.AuthHandler;
+import com.yuanchu.limslaboratory.mapper.RoleManageMapper;
+import com.yuanchu.limslaboratory.utils.ArrayListUtil;
+import com.yuanchu.limslaboratory.utils.MyClassUtil;
+import com.yuanchu.limslaboratory.utils.SpringUtil;
+import io.swagger.annotations.ApiOperation;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.core.annotation.Order;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.*;
+
+import java.lang.reflect.Method;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/28
+ */
+@Component
+@Order(1)
+@Slf4j
+public class ResolutionRequestsCommandLineRunner implements CommandLineRunner {
+
+    @Autowired
+    private RoleManageMapper roleManageMapper;
+
+
+    @SneakyThrows
+    @Override
+    public void run(String... args) throws Exception {
+        //log.info("瀹瑰櫒鐢熸垚涔嬪悗鎵ц");
+        //List<Class<?>> classList = MyClassUtil.getClassList("com.yuanchu.limslaboratory.controller");
+        //List<Map<String, Object>> requestListInfo = new ArrayList<Map<String, Object>>();
+        //List<Map<String, Object>> urlList = new ArrayList<Map<String, Object>>();
+        //classList.stream().forEach(c -> {
+        //    Method[] methods = c.getMethods();
+        //    //鍘绘帀瀵硅薄鏂规硶
+        //    List<Method> methodList = Arrays.stream(methods)
+        //            .filter(m -> !"notify".equals(m.getName()) && !"getClass".equals(m.getName())
+        //                    && !"hashCode".equals(m.getName()) && !"toString".equals(m.getName())
+        //                    && !"equals".equals(m.getName()) && !"wait".equals(m.getName()) && !"notifyAll".equals(m.getName()))
+        //            .collect(Collectors.toList());
+        //
+        //    for (int i = 0; i < methodList.size(); i++) {
+        //        Method method = methodList.get(i);
+        //        if (method.isAnnotationPresent(AuthHandler.class)) {
+        //            //鑾峰彇绫讳笂璇锋眰鍦板潃
+        //            RequestMapping annotation = c.getAnnotation(RequestMapping.class);
+        //            StringBuilder builder = new StringBuilder();
+        //            String apiInfo = null;
+        //            builder.append(annotation.value()[0]);
+        //            //鑾峰彇鏂规硶涓婃敞瑙�
+        //            if (method.isAnnotationPresent(PostMapping.class)) {
+        //                PostMapping post = method.getAnnotation(PostMapping.class);
+        //                builder.append(post.value()[0]);
+        //            }
+        //            if (method.isAnnotationPresent(GetMapping.class)) {
+        //                GetMapping get = method.getAnnotation(GetMapping.class);
+        //                builder.append(get.value()[0]);
+        //            }
+        //            if (method.isAnnotationPresent(DeleteMapping.class)) {
+        //                DeleteMapping delete = method.getAnnotation(DeleteMapping.class);
+        //                builder.append(delete.value()[0]);
+        //            }
+        //            if (method.isAnnotationPresent(PutMapping.class)) {
+        //                PutMapping put = method.getAnnotation(PutMapping.class);
+        //                builder.append(put.value()[0]);
+        //            }
+        //            if (method.isAnnotationPresent(ApiOperation.class)) {
+        //                ApiOperation api = method.getAnnotation(ApiOperation.class);
+        //                apiInfo = api.value();
+        //            }
+        //            Map<String, Object> map = new HashMap<String, Object>();
+        //            map.put("url", builder);
+        //            map.put("name", apiInfo);
+        //            urlList.add(map);
+        //            requestListInfo.add(map);
+        //        }
+        //    }
+        //});
+        //requestListInfo.forEach(System.out::println);
+        //List<Map<String, Object>> allInterfaces = roleManageMapper.getAllInterfaces();
+        //System.out.println(requestListInfo.size());
+        //List<Map<String, Object>> mapList = urlList.stream().filter(item -> !allInterfaces.stream()
+        //                .map(e -> e).distinct().collect(Collectors.toList())
+        //                .contains(item))
+        //        .collect(Collectors.toList());
+        //System.out.println("=======================");
+        //mapList.forEach(System.out::println);
+    }
+
+
+}
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java
index 2668336..46c89a8 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java
@@ -72,4 +72,11 @@
     public Result<?> getRoleAndMenuByRole(Long roleId){
         return Result.success(roleManagerService.getRoleAndMenuByRole(roleId));
     }
+
+    @AuthHandler(type = 1)
+    @ApiOperation("娴嬭瘯鐢熸垚")
+    @GetMapping("/test")
+    public Result<?> test(Long roleId){
+        return Result.success(null);
+    }
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java
index 522c767..731bbc4 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java
@@ -39,4 +39,6 @@
     Map<String, Object>selctInterFaceType(String url);
 
     Map<String, Long> hasUrl(String type, String menuId, String roleId);
+
+    List<Map<String, Object>>getAllInterfaces();
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/MapHandlerRoleDto.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/MapHandlerRoleDto.java
new file mode 100644
index 0000000..537d60d
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/MapHandlerRoleDto.java
@@ -0,0 +1,18 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import com.yuanchu.limslaboratory.utils.JsonUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/28
+ */
+@Component
+public class MapHandlerRoleDto {
+    public static  String comparingBySupplier(Object o){
+        Map map= JsonUtil.jsonToPojo(JsonUtil.jsonToString(o),Map.class);
+        return String.valueOf(map.get("url"));
+    }
+}
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java
index c1c4e18..e65cb0d 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java
@@ -19,6 +19,7 @@
 import com.yuanchu.limslaboratory.service.RoleManagerService;
 import com.yuanchu.limslaboratory.utils.JsonUtil;
 import com.yuanchu.limslaboratory.utils.MyUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -32,6 +33,7 @@
  * @Date 2023/8/23
  */
 @Service
+@Slf4j
 public class RoleManagerServiceImpl implements RoleManagerService {
 
     @Resource
@@ -149,6 +151,7 @@
         String type=null;
         Map<String, Object> stringIntegerMap = roleManageMapper.selctInterFaceType(url);
         if(Objects.isNull(stringIntegerMap)){
+            log.warn("娌℃湁====銆�"+url+"璇锋眰璧勬簮");
             throw new AuthException("403","娌℃湁璇ヨ祫婧�");
         }
         String of = String.valueOf(stringIntegerMap.get("type"));
diff --git a/user-server/src/main/resources/mapper/RoleManangeMapper.xml b/user-server/src/main/resources/mapper/RoleManangeMapper.xml
index f8db203..a269bfa 100644
--- a/user-server/src/main/resources/mapper/RoleManangeMapper.xml
+++ b/user-server/src/main/resources/mapper/RoleManangeMapper.xml
@@ -108,6 +108,10 @@
           and menu_id = #{menuId}
           and ${type} = 1
     </select>
+    <select id="getAllInterfaces" resultType="java.util.Map">
+        select name,url
+        from interface_info
+    </select>
     <resultMap id="roleAndMenuById" type="com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto">
         <result property="roleName" column="roleName"/>
         <result property="createTime" column="createTime"/>

--
Gitblit v1.9.3