| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package cn.com.goldenwater.dcproj.intercepter;
- import cn.com.goldenwater.dcproj.constValue.CommonLabel;
- import cn.com.goldenwater.dcproj.dto.LoginUser;
- import cn.com.goldenwater.dcproj.utils.JWTTokenUtil;
- import cn.com.goldenwater.dcproj.utils.ReturnUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Component;
- import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.util.concurrent.TimeUnit;
- @Component
- public class LogInterceptor extends HandlerInterceptorAdapter {
- @Value("${intercept.enable}")
- public Boolean enterceptEnable;
- private Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private RedisTemplate redisTemplate;
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- throws Exception {
- if (enterceptEnable) {
- String persId = request.getHeader(CommonLabel.PERSID);
- String uuid=request.getHeader(CommonLabel.ACCESS_TOKEN);
- if(StringUtils.isBlank(uuid)){
- ReturnUtils.responseFail(response,"accessToken error!!",9995);
- return false;
- }
- if (StringUtils.isNotBlank(persId)) {
- //有效期内
- String accessToken= (String) redisTemplate.opsForValue().get(uuid);
- logger.info("source-->" + uuid + ":accessToken---->" + accessToken);
- if(accessToken==null||StringUtils.isBlank(accessToken)||"null".equals(accessToken)){
- ReturnUtils.responseFail(response,"token认证失效,请退出重新登录",9999);
- logger.info(request.getRequestURI()+"--->9999");
- return false;
- }
- LoginUser inspAllRlationPers = JWTTokenUtil.unsign(accessToken,persId);
- if(inspAllRlationPers!=null ){
- if(!inspAllRlationPers.getPersId().equals(persId)){
- ReturnUtils.responseFail(response,"信息存在被篡改嫌疑",9991);
- return false;
- }
- synchronized (this) {
- accessToken = JWTTokenUtil.sign(inspAllRlationPers, inspAllRlationPers.getPersId());
- redisTemplate.opsForValue().set(uuid, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS);
- redisTemplate.opsForValue().set(uuid+persId,accessToken,JWTTokenUtil.refreshmaxAge,TimeUnit.MILLISECONDS);
- }
- return true;
- }
- //过了有效期,刷新token
- inspAllRlationPers=JWTTokenUtil.getObject(accessToken,persId);
- if(inspAllRlationPers !=null){
- ReturnUtils.responseFail(response,"accessToken过期,请重新刷新",9998);
- logger.info("token 已经过期,请重新刷新!!");
- }else{
- ReturnUtils.responseFail(response,"accessToken过期,请重新刷新",9996);
- logger.info("请退出重新登陆!!");
- }
- }
- return false;
- } else {
- return true;
- }
- }
- }
|