一、注解类
@Target({ElementType.METHOD, ElementType.TYPE, ElementType.PACKAGE})
@Retention(RetentionPolicy.RUNTIME)
public @interface TokenPermission {
}
二、切面类
@Aspect
@Component
@Slf4j
public class Permission {
@Resource
private RedisTemplate redisTemplate;
/**
* 设置切入点
*/
@Pointcut("@annotation(com.dragonest.aop.TokenPermission)")
public void tokenPointer() {
}
/**
* 环绕切入
*
* @param pjp
* @return
*/
@Around("tokenPointer()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String token = request.getHeader(CommonConstants.TOKEN);
Object tokenInfo = redisTemplate.opsForValue().get("redis中token的key");
if (tokenInfo == null) {
// 抛出token验证异常统一处理
throw GlobalException.getInstance(ErrorCodeEnum.TOKEN_EMPTY);
}
Object object = pjp.proceed();
return object;
}
}