一、注解类

  1. @Target({ElementType.METHOD, ElementType.TYPE, ElementType.PACKAGE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. public @interface TokenPermission {
  4. }

二、切面类

  1. @Aspect
  2. @Component
  3. @Slf4j
  4. public class Permission {
  5. @Resource
  6. private RedisTemplate redisTemplate;
  7. /**
  8. * 设置切入点
  9. */
  10. @Pointcut("@annotation(com.dragonest.aop.TokenPermission)")
  11. public void tokenPointer() {
  12. }
  13. /**
  14. * 环绕切入
  15. *
  16. * @param pjp
  17. * @return
  18. */
  19. @Around("tokenPointer()")
  20. public Object around(ProceedingJoinPoint pjp) throws Throwable {
  21. ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  22. HttpServletRequest request = attributes.getRequest();
  23. String token = request.getHeader(CommonConstants.TOKEN);
  24. Object tokenInfo = redisTemplate.opsForValue().get("redis中token的key");
  25. if (tokenInfo == null) {
  26. // 抛出token验证异常统一处理
  27. throw GlobalException.getInstance(ErrorCodeEnum.TOKEN_EMPTY);
  28. }
  29. Object object = pjp.proceed();
  30. return object;
  31. }
  32. }