CheckPermitAspect.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package com.fdkankan.scene.Interceptor;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.fdkankan.common.constant.CommonStatus;
  5. import com.fdkankan.common.constant.ErrorCode;
  6. import com.fdkankan.common.constant.PayStatus;
  7. import com.fdkankan.common.constant.SceneStatus;
  8. import com.fdkankan.common.exception.BusinessException;
  9. import com.fdkankan.redis.constant.RedisKey;
  10. import com.fdkankan.redis.util.RedisUtil;
  11. import com.fdkankan.scene.entity.SceneCooperation;
  12. import com.fdkankan.scene.entity.ScenePlus;
  13. import com.fdkankan.scene.service.ISceneCooperationService;
  14. import com.fdkankan.scene.service.IScenePlusService;
  15. import com.fdkankan.web.user.SSOLoginHelper;
  16. import com.fdkankan.web.user.SSOUser;
  17. import com.fdkankan.web.util.WebUtil;
  18. import java.io.IOException;
  19. import java.util.HashSet;
  20. import java.util.List;
  21. import java.util.Objects;
  22. import java.util.Set;
  23. import javax.servlet.http.HttpServletRequest;
  24. import lombok.extern.log4j.Log4j2;
  25. import org.aspectj.lang.JoinPoint;
  26. import org.aspectj.lang.annotation.Aspect;
  27. import org.aspectj.lang.annotation.Before;
  28. import org.aspectj.lang.annotation.Pointcut;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.beans.factory.annotation.Value;
  31. import org.springframework.core.annotation.Order;
  32. import org.springframework.stereotype.Component;
  33. import org.springframework.web.context.request.RequestContextHolder;
  34. import org.springframework.web.context.request.ServletRequestAttributes;
  35. @Log4j2
  36. @Aspect
  37. @Component
  38. @Order(101)
  39. public class CheckPermitAspect {
  40. private static Set<String> demoAllowApis = new HashSet<>();
  41. static {
  42. demoAllowApis.add("/tag/list");
  43. demoAllowApis.add("/linkPan/list");
  44. demoAllowApis.add("/getInfo");
  45. demoAllowApis.add("/downloadPanorama");
  46. demoAllowApis.add("/downloadBallScreenVideo");
  47. demoAllowApis.add("/getAuth");
  48. demoAllowApis.add("/tour/video/download");
  49. demoAllowApis.add("/mosaics/list");
  50. demoAllowApis.add("/filter/list");
  51. demoAllowApis.add("/surveillance/list");
  52. demoAllowApis.add("/billboards/list");
  53. demoAllowApis.add("/cutModel/list");
  54. demoAllowApis.add("/point/getLatAndLon");
  55. demoAllowApis.add("/box4/getInfos");
  56. demoAllowApis.add("/dynamicPanel/list");
  57. demoAllowApis.add("/sceneDraw/list");
  58. }
  59. @Value("#{'${demo.scene.num:}'.split(',')}")
  60. private List<String> demoSceneNums;
  61. @Autowired
  62. private SSOLoginHelper ssoLoginHelper;
  63. @Autowired
  64. private RedisUtil redisUtil;
  65. @Autowired
  66. private IScenePlusService scenePlusService;
  67. @Autowired
  68. private ISceneCooperationService sceneCooperationService;
  69. @Pointcut("@annotation(com.fdkankan.scene.annotation.CheckPermit)")
  70. public void checkCooperationPermit() {
  71. }
  72. /**
  73. * 前置通知 用于判断用户协作场景是否有协作权限
  74. *
  75. * @param joinPoint
  76. * 切点
  77. * @throws IOException
  78. */
  79. @Before("checkCooperationPermit()")
  80. public void doBefore(JoinPoint joinPoint) throws Exception {
  81. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  82. // 读取session中的用户
  83. SSOUser user = ssoLoginHelper.getSsoUser(request.getHeader("token"));
  84. if(Objects.isNull(user)){
  85. throw new BusinessException(ErrorCode.TOKEN_NOT_FOUND);
  86. }
  87. String num = WebUtil.getParameter("num", joinPoint, request);
  88. if(StrUtil.isEmpty(num)){
  89. throw new BusinessException(ErrorCode.PARAM_REQUIRED);
  90. }
  91. ScenePlus scenePlus= scenePlusService.getScenePlusByNum(num);
  92. if(Objects.isNull(scenePlus)){
  93. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  94. }
  95. //如果是计算中或者计算出错,返回计算中
  96. if(SceneStatus.wait.code().equals(scenePlus.getSceneStatus())
  97. || SceneStatus.FAILD.code().equals(scenePlus.getSceneStatus())){
  98. throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
  99. }
  100. if(!PayStatus.PAY.code().equals(scenePlus.getPayStatus())){
  101. throw new BusinessException(ErrorCode.FAILURE_CODE_5034);
  102. }
  103. //判断是否相机登录,是否场景的相机id和相机登录的相机id是否相等,如果都满足,则放行,否则判定为用户登录
  104. if(Objects.nonNull(user.getCameraLogin())
  105. && CommonStatus.YES.code().byteValue() == user.getCameraLogin().intValue()){
  106. if(scenePlus.getCameraId().equals(user.getCameraId())){
  107. return;
  108. }else{
  109. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  110. }
  111. }
  112. if(CollUtil.isNotEmpty(demoSceneNums) && demoSceneNums.contains(num)){//这是一个demo场景,允许无条件打开编辑页,但是不允许提交数据
  113. String requestURI = request.getRequestURI();
  114. for (String demoAllowApi : demoAllowApis) {
  115. if(requestURI.contains(demoAllowApi)){
  116. return;
  117. }
  118. }
  119. }
  120. //走到这里代表是用户账号密码登录,如果查到的场景的userid是空,证明相机解绑了,需要返回无权操作
  121. if(Objects.isNull(scenePlus.getUserId())){
  122. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  123. }
  124. if(scenePlus.getUserId().equals(user.getId())){
  125. return;
  126. }
  127. //如果不是用户自己的场景,判断是否有协作权限
  128. SceneCooperation sceneCooperation = sceneCooperationService.getByNumAndUserId(num, user.getId());
  129. if(Objects.isNull(sceneCooperation)){
  130. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  131. }
  132. }
  133. }