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; } 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; } } 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 = "éæ©æ£éªé¡¹ç®ç责任人") @GetMapping("/selectUser") @AuthHandler public Result selectUser() { return Result.success(userMapper.selectUser()); } @@ -144,6 +147,7 @@ @ApiImplicitParam(name = "userProId", value = "责任人id", 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)); } } 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); } } 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); } } 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(); } 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")); } } 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")); 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"/>