Browse Source

切面里面替换为token所在的医院ID

gaodm 4 năm trước cách đây
mục cha
commit
fece65e0ce

+ 32 - 10
src/main/java/com/diagbot/aop/TokenAuthAspect.java

@@ -10,13 +10,15 @@ import com.diagbot.facade.TokenPermissionFacade;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysJwtUtil;
+import com.diagbot.vo.HospitalBaseVO;
 import com.diagbot.vo.HospitalCheckVO;
 import com.diagbot.vo.TokenPermissionVO;
 import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,7 +60,7 @@ public class TokenAuthAspect {
     private static TokenPermissionFacade tokenPermissionFacade;
 
     @Autowired
-    public void TokenAuthAspect(HospitalInfoFacade hospitalInfoFacade,TokenHospitalFacade tokenHospitalFacade,TokenPermissionFacade tokenPermissionFacade) {
+    public void TokenAuthAspect(HospitalInfoFacade hospitalInfoFacade, TokenHospitalFacade tokenHospitalFacade, TokenPermissionFacade tokenPermissionFacade) {
         TokenAuthAspect.hospitalInfoFacade = hospitalInfoFacade;
         TokenAuthAspect.tokenHospitalFacade = tokenHospitalFacade;
         TokenAuthAspect.tokenPermissionFacade = tokenPermissionFacade;
@@ -69,15 +71,23 @@ public class TokenAuthAspect {
     public void pointcutController() {
     }
 
-    @Before("pointcutController()")
-    public void permissionIntercept(JoinPoint joinPoint) {
+    @Around("pointcutController()")
+    public Object permissionIntercept(ProceedingJoinPoint joinPoint) throws Throwable {
         //确定是否有TokenAuth注解
         MethodSignature signature = (MethodSignature) joinPoint.getSignature();
         Method method = signature.getMethod();
 
         TokenAuth tokenAuth = method.getAnnotation(TokenAuth.class);
+        //获取方法参数
+        Object[] args = joinPoint.getArgs();
+        Object proceed = null;
         if (tokenAuth == null) {
-            return;
+            //执行方法后获取出参
+            proceed = joinPoint.proceed(args);
+            if (null == proceed) {
+                return null;
+            }
+            return proceed;
         }
         //有TokenAuth注解情况下
         RequestAttributes ra = RequestContextHolder.getRequestAttributes();
@@ -92,10 +102,10 @@ public class TokenAuthAspect {
         long hospitalId = Long.parseLong(SysJwtUtil.getHospId(token));
         HospitalCheckVO hospitalCheckVO = new HospitalCheckVO();
         hospitalCheckVO.setHospitalId(hospitalId);
-        if (!hospitalInfoFacade.checkHospital(hospitalCheckVO)){
+        if (!hospitalInfoFacade.checkHospital(hospitalCheckVO)) {
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "该医院不存在!");
         }
-        if(!tokenHospitalFacade.checkTokenHospitals(token)){
+        if (!tokenHospitalFacade.checkTokenHospitals(token)) {
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "已超过有效期");
         }
         //todo 权限拦截
@@ -134,7 +144,6 @@ public class TokenAuthAspect {
             throw new CommonException(CommonErrorCode.NO_PERMISSION);
         }
         //todo 验证参数
-        Object[] args = joinPoint.getArgs();
         if (args == null) {
             throw new CommonException(CommonErrorCode.NO_PERMISSION);
         }
@@ -169,8 +178,8 @@ public class TokenAuthAspect {
                                 String getter = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                                 String type = fields[i].getGenericType().toString();
                                 Class clazz = entry.getValue().getClass();
-                                Method methods = clazz.getMethod(getter, new Class[]{});
-                                Object obj = methods.invoke(entry.getValue(), new Object[]{});
+                                Method methods = clazz.getMethod(getter, new Class[] {});
+                                Object obj = methods.invoke(entry.getValue(), new Object[] {});
                                 if (type.equals("class java.lang.String")
                                         || type.equals("class java.lang.Integer")
                                         || type.equals("class java.lang.Long")) {
@@ -219,7 +228,19 @@ public class TokenAuthAspect {
             throw new CommonException(CommonErrorCode.FAIL, e.getMessage());
         }
 
+        //验证替换hospotalId
+        for (Object obj : args) {
+            if (obj instanceof HospitalBaseVO){
+                HospitalBaseVO hospitalBaseVO = (HospitalBaseVO) obj;
+                //todo 设置为token所在的医院ID
+                hospitalBaseVO.setHospitalId(2L);
+            }
+        }
+        //执行方法后获取出参
+        proceed = joinPoint.proceed(args);
+        return proceed;
     }
+
     public static Field[] getAllFields(Object object) {
         Class clazz = object.getClass();
         List<Field> fieldList = new ArrayList<>();
@@ -265,6 +286,7 @@ public class TokenAuthAspect {
         }
 
     }
+
     private static HashMap<String, Class> map = new HashMap<String, Class>() {
         {
             put("java.lang.Integer", int.class);

+ 52 - 53
src/main/java/com/diagbot/facade/TokenPermissionFacade.java

@@ -1,12 +1,10 @@
 package com.diagbot.facade;
 
 import com.diagbot.dto.PermissionDTO;
-import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.TokenPermissionDTO;
 import com.diagbot.service.impl.TokenPermissionServiceImpl;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
-import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.TokenPermissionVO;
 import com.google.common.collect.Lists;
@@ -35,65 +33,66 @@ public class TokenPermissionFacade extends TokenPermissionServiceImpl {
 
     @Cacheable(value = PERMISSIONCACHE, key = "'permission:hc_' + #tokenPermissionVO.tokenId + '_st_' + #tokenPermissionVO.type")
     public PermissionDTO getPermission(TokenPermissionVO tokenPermissionVO) {
-            List<TokenPermissionDTO> hosPermissionDTOS =getTokenPermission(tokenPermissionVO);;
+        List<TokenPermissionDTO> hosPermissionDTOS = getTokenPermission(tokenPermissionVO);
 
-            PermissionDTO permissionDTO = new PermissionDTO();
-            permissionDTO.setTokenPermission(hosPermissionDTOS);
+        PermissionDTO permissionDTO = new PermissionDTO();
+        permissionDTO.setTokenPermission(hosPermissionDTOS);
 
-            Map<String, Map<String, List<Map<String, Set<String>>>>> permissionMap = new HashMap<>();
-            if (ListUtil.isNotEmpty(hosPermissionDTOS)) {
-                //带参数的接口缓存
-                List<TokenPermissionDTO> hasParamList = hosPermissionDTOS.stream()
-                        .filter(hosPermissionDTO -> StringUtil.isNotBlank(hosPermissionDTO.getParamKey()))
-                        .collect(Collectors.toList());
-                Map<String, List<Map<String, Set<String>>>> hasParamMap = new HashMap<>();
-                if (ListUtil.isNotEmpty(hasParamList)) {
-                    Map<String, List<TokenPermissionDTO>> hosPermissionDTOMap
-                            = EntityUtil.makeEntityListMap(hasParamList, "permissionUrl");
-                    for (Map.Entry<String, List<TokenPermissionDTO>> entry : hosPermissionDTOMap.entrySet()) {
-                        List<Map<String, Set<String>>> paramList = Lists.newLinkedList();
-                        if (ListUtil.isNotEmpty(entry.getValue())) {
-                            for (TokenPermissionDTO hosPermissionDTO : entry.getValue()) {
-                                Map<String, Set<String>> paramMap = new HashMap<>();
-                                if (StringUtil.isBlank(hosPermissionDTO.getParamValue())) {
-                                    continue;
-                                }
-                                String paramKey = hosPermissionDTO.getParamKey();
-                                String paramValue = hosPermissionDTO.getParamValue();
-                                String[] paramKeyArr = paramKey.trim().split(",|,");
-                                String[] paramValueArr = paramValue.trim().split(";|;");
-                                if (paramKeyArr.length != paramValueArr.length) {
-                                    continue;
-                                }
-                                for (int i = 0; i < paramKeyArr.length; i++) {
-                                    Set<String> paramValueSet
-                                            = new HashSet<>(Arrays.asList(paramValueArr[i].split(",|,")));
-                                    paramMap.put(paramKeyArr[i], paramValueSet);
-                                }
-                                paramList.add(paramMap);
+        Map<String, Map<String, List<Map<String, Set<String>>>>> permissionMap = new HashMap<>();
+        if (ListUtil.isNotEmpty(hosPermissionDTOS)) {
+            //带参数的接口缓存
+            List<TokenPermissionDTO> hasParamList = hosPermissionDTOS.stream()
+                    .filter(hosPermissionDTO -> StringUtil.isNotBlank(hosPermissionDTO.getParamKey()))
+                    .collect(Collectors.toList());
+            Map<String, List<Map<String, Set<String>>>> hasParamMap = new HashMap<>();
+            if (ListUtil.isNotEmpty(hasParamList)) {
+                Map<String, List<TokenPermissionDTO>> hosPermissionDTOMap
+                        = EntityUtil.makeEntityListMap(hasParamList, "permissionUrl");
+                for (Map.Entry<String, List<TokenPermissionDTO>> entry : hosPermissionDTOMap.entrySet()) {
+                    List<Map<String, Set<String>>> paramList = Lists.newLinkedList();
+                    if (ListUtil.isNotEmpty(entry.getValue())) {
+                        for (TokenPermissionDTO hosPermissionDTO : entry.getValue()) {
+                            Map<String, Set<String>> paramMap = new HashMap<>();
+                            if (StringUtil.isBlank(hosPermissionDTO.getParamValue())) {
+                                continue;
                             }
-                            hasParamMap.put(entry.getKey(), paramList);
+                            String paramKey = hosPermissionDTO.getParamKey();
+                            String paramValue = hosPermissionDTO.getParamValue();
+                            String[] paramKeyArr = paramKey.trim().split(",|,");
+                            String[] paramValueArr = paramValue.trim().split(";|;");
+                            if (paramKeyArr.length != paramValueArr.length) {
+                                continue;
+                            }
+                            for (int i = 0; i < paramKeyArr.length; i++) {
+                                Set<String> paramValueSet
+                                        = new HashSet<>(Arrays.asList(paramValueArr[i].split(",|,")));
+                                paramMap.put(paramKeyArr[i], paramValueSet);
+                            }
+                            paramList.add(paramMap);
                         }
+                        hasParamMap.put(entry.getKey(), paramList);
                     }
                 }
-                permissionMap.put("hasParam", hasParamMap);
-                //不带参数的接口缓存
-                List<TokenPermissionDTO> noParamList = hosPermissionDTOS.stream()
-                        .filter(hosPermissionDTO -> StringUtil.isBlank(hosPermissionDTO.getParamKey()))
-                        .collect(Collectors.toList());
-                Map<String, List<Map<String, Set<String>>>> noParamMap = new HashMap<>();
-                if (ListUtil.isNotEmpty(noParamList)) {
-                    Map<String, List<TokenPermissionDTO>> hosPermissionDTOMap
-                            = EntityUtil.makeEntityListMap(noParamList, "permissionUrl");
-                    for (Map.Entry<String, List<TokenPermissionDTO>> entry : hosPermissionDTOMap.entrySet()) {
-                        noParamMap.put(entry.getKey(), null);
-                    }
+            }
+            permissionMap.put("hasParam", hasParamMap);
+            //不带参数的接口缓存
+            List<TokenPermissionDTO> noParamList = hosPermissionDTOS.stream()
+                    .filter(hosPermissionDTO -> StringUtil.isBlank(hosPermissionDTO.getParamKey()))
+                    .collect(Collectors.toList());
+            Map<String, List<Map<String, Set<String>>>> noParamMap = new HashMap<>();
+            if (ListUtil.isNotEmpty(noParamList)) {
+                Map<String, List<TokenPermissionDTO>> hosPermissionDTOMap
+                        = EntityUtil.makeEntityListMap(noParamList, "permissionUrl");
+                for (Map.Entry<String, List<TokenPermissionDTO>> entry : hosPermissionDTOMap.entrySet()) {
+                    noParamMap.put(entry.getKey(), null);
                 }
-                permissionMap.put("noParam", noParamMap);
             }
-            permissionDTO.setPermissionMap(permissionMap);
-            return permissionDTO;
+            permissionMap.put("noParam", noParamMap);
         }
+        permissionDTO.setPermissionMap(permissionMap);
+        return permissionDTO;
+    }
+
     /**
      * 清理权限所有缓存
      *
@@ -104,5 +103,5 @@ public class TokenPermissionFacade extends TokenPermissionServiceImpl {
         log.info("清理服务权限缓存成功");
         return true;
     }
-    }
+}
 

+ 1 - 4
src/main/java/com/diagbot/vo/AnalyzeRunVO.java

@@ -11,13 +11,10 @@ import javax.validation.constraints.NotNull;
  * @time: 2020/4/13 18:31
  */
 @Data
-public class AnalyzeRunVO {
+public class AnalyzeRunVO extends HospitalBaseVO {
     // 病历id
     @NotBlank(message = "behospitalCode不能为空")
     private String behospitalCode;
-    // 医院ID
-    @NotNull(message = "hospitalId不能为空")
-    private Long hospitalId;
     // 模块id
     @NotNull(message = "modeId不能为空")
     private Long modeId;

+ 19 - 0
src/main/java/com/diagbot/vo/HospitalBaseVO.java

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/7/29 18:37
+ */
+@Getter
+@Setter
+public class HospitalBaseVO {
+    // 医院ID
+    @NotNull(message = "请输入医院id")
+    private Long hospitalId;
+}

+ 1 - 7
src/main/java/com/diagbot/vo/HospitalPlanVO.java

@@ -3,9 +3,6 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-
 /**
  * @author wangfeng
  * @Description:
@@ -13,10 +10,7 @@ import javax.validation.constraints.NotNull;
  */
 @Setter
 @Getter
-public class HospitalPlanVO {
-
-    @NotNull(message = "请输入医院id")
-    private Long hospitalId;
+public class HospitalPlanVO extends HospitalBaseVO {
     /**
      * 方案编号
      */

+ 1 - 5
src/main/java/com/diagbot/vo/HospitalSetVO.java

@@ -3,8 +3,6 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
-import javax.validation.constraints.NotNull;
-
 /**
  * @author wangfeng
  * @Description:
@@ -12,9 +10,7 @@ import javax.validation.constraints.NotNull;
  */
 @Setter
 @Getter
-public class HospitalSetVO {
-    @NotNull(message = "请输入医院id")
-    private Long hospitalId;
+public class HospitalSetVO extends HospitalBaseVO {
     private Long planId;
     private String code;
 }

+ 1 - 5
src/main/java/com/diagbot/vo/SearchData.java

@@ -16,11 +16,7 @@ import java.util.List;
  */
 @Getter
 @Setter
-public class SearchData {
-    /**
-     * 医院ID
-     */
-    private Long hospitalId;
+public class SearchData extends HospitalBaseVO {
     /**
      * 大数据返回内容截取长度
      */

+ 2 - 0
src/main/java/com/diagbot/web/SysPlanController.java

@@ -2,6 +2,7 @@ package com.diagbot.web;
 
 
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.annotation.TokenAuth;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.SysPlanInfoDTO;
 import com.diagbot.dto.SysSetInfoDTO;
@@ -42,6 +43,7 @@ public class SysPlanController {
     @ApiOperation(value = "根据医院获取方案配置信息[by:wangfeng]", notes = "hospitalid :医院id  必填<br> ")
     @PostMapping("/getSysPlanInfoDatas")
     @SysLogger("getSysPlanInfoDatas")
+    @TokenAuth
     public RespDTO<SysPlanInfoDTO> getSysPlanInfoDatas(@Valid @RequestBody HospitalPlanVO hospitalPlanVO) {
         SysPlanInfoDTO data = sysPlanFacade.getSysPlanInfoData(hospitalPlanVO);
         return RespDTO.onSuc(data);