重写实现 DefaultInterceptor
- 注意要写
@Primary
package com.detabes.gzyanalysis.config;
import cn.hutool.core.util.ObjectUtil;
import com.detabes.gzyanalysis.constant.RedisConstant;
import com.detabes.gzyanalysis.controller.user.vo.UserVO;
import com.detabes.gzyanalysis.util.UserTokenUtil;
import com.detabes.jwt.util.JwtUtil;
import com.detabes.jwtweb.server.impl.DefaultInterceptor;
import com.detabes.redis.core.config.RedisProxy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
/**
* 登录验证实现
*
* @author tn
* @className JWTCheckTokenInterceptorImpl
* @date 2021-10-11 09:28
*/
@Service
@Primary
@Slf4j
public class JWTCheckTokenInterceptorImpl extends DefaultInterceptor {
private final RedisProxy redisProxy;
@Value("${gzy.onlylogin:true}")
private String onlylogin;
public JWTCheckTokenInterceptorImpl(RedisProxy redisProxy) {
this.redisProxy = redisProxy;
}
@Override
public boolean checkToken(String token) {
try {
UserVO userVO = UserTokenUtil.getTokenInfoByStr(token);
// 存储方式(k:loginName, v:token)
if(Boolean.parseBoolean(onlylogin)){
Object userToken = redisProxy.hget(RedisConstant.USER_LIST_KEY + ":" + userVO.getUserNo(),
userVO.getUserNo());
if(ObjectUtil.isNull(userToken)||!token.equals(userToken)){
// redis 中没有该用户的登录信息 qie token 当前token跟redis中的token要一直
return false;
}
}
// 验证token有效期
return JwtUtil.verity(token);
}catch (Exception e){
log.error("redis中获取用户失败",e);
return false;
}
}
}