private static final String TOKEN = "token";
private static final String LOGIN_METHOD = "verify";
private static final String TOKEN_NOT_NULL = "header里面不存在token信息!";
/**
* token过期时间2小时
*/
private static final long EXPIRES = 7200L;
@Pointcut("execution(* com.ggfw.workorder.controller..*.*(..))")
public void checkToken(){
}
/**
* @Description: 检验key是否到期
* @Param: [point]
* @return: void
* @Author: sjhhh
* @Date: 2023/2/15
*/
@Before("checkToken()")
public void checkTokenExpires(JoinPoint point){
String methodName = point.getSignature().getName();
if(StrUtil.equals(LOGIN_METHOD,methodName)){
return;
}
checkExpires(getTokenKey());
}
/**
* @Description: 获取token
* @Param: []
* @return: java.lang.String
* @Author: sjhhh
* @Date: 2023/2/15
*/
private String getTokenKey(){
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes) attributes;
assert sra!=null;
HttpServletRequest request = sra.getRequest();
String tokenKey = request.getHeader(TOKEN);
if(StrUtil.isBlank(tokenKey)){
throw new BusinessException(TOKEN_NOT_NULL);
}
return tokenKey;
}
/**
* @Description: 检验token是否过期并返回用户信息
* @Param: [tokenKey]
* @return: com.ggfw.workorder.dto.account.AccountInfoDTO
* @Author: sjhhh
* @Date: 2023/2/15
*/
public AccountInfoDTO checkExpires(String tokenKey){
boolean hasKey = RedisUtils.hasKey(tokenKey);
if (!hasKey) {
CodeStatus unauthorized = CodeStatus.UNAUTHORIZED;
throw new BusinessException(Integer.parseInt(unauthorized.getCode()), unauthorized.getReason());
}
Object o = RedisUtils.get(tokenKey);
String string = JSONUtil.toJsonStr(o);
AccountInfoDTO accountInfoDTO = JSONUtil.toBean(string, AccountInfoDTO.class);
AccountInfoDTO userInfo = accountInfoDTO;
//重新设置token过期时间
RedisUtils.set(tokenKey,userInfo,EXPIRES);
return userInfo;
}
切面实现用户token过期校验
最新推荐文章于 2023-05-07 20:33:27 发布