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