520dc1501f1105a7a734d4c1e46fdfdc73461308.svn-base 4.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package cn.com.goldenwater.dcproj.target;
  2. import cn.com.goldenwater.dcproj.constValue.CommonLabel;
  3. import cn.com.goldenwater.dcproj.dto.LoginUser;
  4. import cn.com.goldenwater.dcproj.model.BisInspPersOrg;
  5. import cn.com.goldenwater.dcproj.param.BisInspPersOrgParam;
  6. import cn.com.goldenwater.dcproj.service.BisInspPersOrgService;
  7. import cn.com.goldenwater.dcproj.service.ErrorService;
  8. import cn.com.goldenwater.dcproj.utils.JWTTokenUtil;
  9. import cn.com.goldenwater.dcproj.utils.RequestUtils;
  10. import cn.com.goldenwater.dcproj.utils.ReturnUtils;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.aspectj.lang.ProceedingJoinPoint;
  13. import org.aspectj.lang.annotation.Around;
  14. import org.aspectj.lang.annotation.Aspect;
  15. import org.aspectj.lang.annotation.Pointcut;
  16. import org.aspectj.lang.reflect.MethodSignature;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.beans.factory.annotation.Value;
  19. import org.springframework.data.redis.core.RedisTemplate;
  20. import org.springframework.stereotype.Component;
  21. import org.springframework.web.context.request.RequestContextHolder;
  22. import org.springframework.web.context.request.ServletRequestAttributes;
  23. import javax.servlet.http.HttpServletRequest;
  24. import javax.servlet.http.HttpServletResponse;
  25. import java.lang.reflect.Method;
  26. @Aspect
  27. @Component("authorityAop")
  28. public class AuthorityAop {
  29. @Value("${intercept.enable}")
  30. private boolean interceptEnable;
  31. @Autowired
  32. private RedisTemplate redisTemplate;
  33. @Autowired
  34. private ErrorService errorService;
  35. @Autowired
  36. private BisInspPersOrgService bisInspPersOrgService;
  37. @Pointcut(value = "@annotation(cn.com.goldenwater.dcproj.target.Authority)")
  38. public void authorityAop() {
  39. }
  40. @Around("authorityAop()")
  41. public Object doaround(ProceedingJoinPoint pjp) throws Throwable {
  42. MethodSignature signature = (MethodSignature) pjp.getSignature();
  43. Method method = signature.getMethod();
  44. Authority authority = method.getAnnotation(Authority.class);
  45. if (authority != null && interceptEnable) {
  46. HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
  47. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  48. String persId = request.getHeader(CommonLabel.PERSID);
  49. String roles = authority.roles();
  50. String uuid = request.getHeader(CommonLabel.ACCESS_TOKEN);
  51. // 判断请求是否有含有 accessToken
  52. if (StringUtils.isBlank(uuid)) {
  53. errorService.addErrorMsg("accessToken is null", request);
  54. return ReturnUtils.retFileResponse(9991, CommonLabel.NO_PREMISSION);
  55. }
  56. // 获取登录用户
  57. String accessToken = (String) redisTemplate.opsForValue().get(uuid);
  58. LoginUser inspAllRlationPers = JWTTokenUtil.unsign(accessToken, persId);
  59. if (inspAllRlationPers == null) {
  60. return ReturnUtils.retFileResponse(9999, "请退出后重新登录!!");
  61. }
  62. BisInspPersOrgParam bisInspPersOrgParam = new BisInspPersOrgParam();
  63. String orgId = request.getHeader(CommonLabel.ORGId);
  64. bisInspPersOrgParam.setOrgId(orgId);
  65. bisInspPersOrgParam.setPersId(inspAllRlationPers.getPersId());
  66. BisInspPersOrg bisInspPersOrg = bisInspPersOrgService.getBy(bisInspPersOrgParam);
  67. if ("1".equals(roles)) {
  68. // 管理员操作
  69. if (!"1".equals(bisInspPersOrg.getUserType())) {
  70. // 用户无权限操作此接口
  71. errorService.addErrorMsg("用户无权限操作此接口! persType[" + bisInspPersOrg.getUserType() + "]", request);
  72. return ReturnUtils.retFileResponse(9991, CommonLabel.NO_PREMISSION);
  73. }
  74. } else {
  75. // Questions ???
  76. String paramPersId = RequestUtils.getPersId(request, response);
  77. if (StringUtils.isNotBlank(paramPersId)) {
  78. if (!persId.equals(paramPersId)) {
  79. errorService.addErrorMsg("persId is not eq:{persId:" + persId + ",paramPersId:+" + paramPersId + "}", request);
  80. return ReturnUtils.retFileResponse(9991, CommonLabel.NO_PREMISSION);
  81. }
  82. }
  83. }
  84. }
  85. return pjp.proceed();
  86. }
  87. }