Fixiaobai
2023-08-29 15e7d7914452cb21646034e428d0bbf734d35edb
修改
已修改6个文件
已添加3个文件
230 ■■■■■ 文件已修改
framework/src/main/java/com/yuanchu/limslaboratory/annotation/AuthHandler.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/MyClassUtil.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/src/main/java/com/yuanchu/limslaboratory/commandLineRunner/ResolutionRequestsCommandLineRunner.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/MapHandlerRoleDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/RoleManangeMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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"/>