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