首先我们知道在登录状态下要保存Token,当进行操作的时候我们要去判断Token是否存在,所以这里写了一个简单的判断Token的方法
定义切入点
还是用注解作为切入点,个人认为用注解作为切入点是最好,最方便的一种方法
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface TokenAnnotation {
}
具体的方法体
//切入点表达式
@Before("@annotation(com.twoblog.twoblogmaster.annotation.TokenAnnotation)")
public void HashToken(JoinPoint joinPoint) throws TokenOverdueException, NoHasTokenException {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
String token = requestAttributes.getRequest().getHeader("token");//从请求头里面拿到token
if(token == null){
throw new NoHasTokenException();
}else {
long expireInRedis = tokenUtil.getExpireInRedis(token);
if (expireInRedis > tokenUtil.getTokenTime()/2){
return;
}
if ( expireInRedis < tokenUtil.getTokenTime()/2 && expireInRedis > 0){
//如果token的事件小于规定事件的一半,续签
tokenUtil.setTokenExpire(token);
return;
}
//如果token时间小于0,表明长时间未操作,将用户踢出
Assert.isTrue(expireInRedis > 0,TokenOverdueException::new);
}
}