CheckTokenAspect.java 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package com.fdkankan.scene.Interceptor;
  2. import cn.hutool.http.HttpUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.fdkankan.common.exception.BusinessException;
  7. import com.fdkankan.common.util.ThreeDESUtil;
  8. import com.fdkankan.common.util.UserAgentUtils;
  9. import com.fdkankan.common.util.WebUtil;
  10. import com.fdkankan.feign.TietaFeignClient;
  11. import com.fdkankan.feign.WS4AServiceClient;
  12. import com.fdkankan.scene.entity.SceneViewLog;
  13. import com.fdkankan.scene.service.SceneViewLogService;
  14. import lombok.extern.log4j.Log4j2;
  15. import org.aspectj.lang.JoinPoint;
  16. import org.aspectj.lang.annotation.Aspect;
  17. import org.aspectj.lang.annotation.Before;
  18. import org.aspectj.lang.annotation.Pointcut;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.core.annotation.Order;
  22. import org.springframework.stereotype.Component;
  23. import org.springframework.web.context.request.RequestContextHolder;
  24. import org.springframework.web.context.request.ServletRequestAttributes;
  25. import javax.annotation.Resource;
  26. import javax.servlet.http.HttpServletRequest;
  27. import java.io.IOException;
  28. import java.util.Date;
  29. import java.util.HashMap;
  30. import java.util.Map;
  31. @Log4j2
  32. @Aspect
  33. @Component
  34. @Order(101)
  35. public class CheckTokenAspect {
  36. @Value("${spring.cloud.nacos.discovery.access-key}")
  37. private String accessKey;
  38. @Value("${tieta.checkToken.syscode}")
  39. private String syscode;
  40. @Value("${gateway.key:6#dPz>3F}")
  41. private String gatewayKey;
  42. @Value("${gateway.url}")
  43. private String gatewayUrl;
  44. @Resource
  45. private TietaFeignClient tietaFeignClient;
  46. @Autowired
  47. private WS4AServiceClient ws4AServiceClient;
  48. @Autowired
  49. private SceneViewLogService sceneViewLogService;
  50. @Pointcut("@annotation(com.fdkankan.scene.annotation.CheckToken)")
  51. public void CheckToken() {
  52. }
  53. /**
  54. * 前置通知 用于判断用户协作场景是否有协作权限
  55. *
  56. * @param joinPoint
  57. * 切点
  58. * @throws IOException
  59. */
  60. @Before("CheckToken()")
  61. public void doBefore(JoinPoint joinPoint) throws Exception {
  62. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  63. //请求4a接口获取用户信息
  64. Map<String, Object> parameter = WebUtil.getParameter(joinPoint, request);
  65. String acctId = (String) parameter.get("acctId");
  66. String token = (String) parameter.get("token");
  67. String num = (String) parameter.get("num");
  68. //token校验
  69. JSONObject checkProwadaTokenParam = new JSONObject();
  70. JSONObject params = new JSONObject();
  71. params.put("SYSCODE", syscode);
  72. params.put("ACCTID", acctId);
  73. params.put("TOKEN", token);
  74. String encode = ThreeDESUtil.encode(JSON.toJSONString(params), gatewayKey);
  75. checkProwadaTokenParam.put("args", encode);
  76. JSONObject result = ws4AServiceClient.checkProwadaToken(checkProwadaTokenParam);
  77. log.info("场景:{},4A校验token结果:{}", num, result);
  78. if(!"SUCCESS".equals(result.getString("resultStat"))){
  79. throw new BusinessException(4000, "4A鉴权失败");
  80. }
  81. String data = result.getString("data");
  82. JSONObject dataObj = JSONObject.parseObject(data);
  83. if(!"0".equals(dataObj.getString("RSP"))){
  84. throw new BusinessException(4000, "4A鉴权失败:" + dataObj.getString("ERRDESC"));
  85. }
  86. }
  87. }