TokenInterceptor.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package com.fdkankan.scene.Interceptor;
  2. import com.alibaba.fastjson.JSON;
  3. import com.fdkankan.common.constant.ErrorCode;
  4. import com.fdkankan.redis.constant.RedisKey;
  5. import com.fdkankan.redis.util.RedisUtil;
  6. import com.fdkankan.web.response.ResultData;
  7. import java.io.IOException;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Component;
  14. import org.springframework.web.servlet.HandlerInterceptor;
  15. @Component
  16. @Slf4j
  17. public class TokenInterceptor implements HandlerInterceptor {
  18. @Autowired
  19. private RedisUtil redisUtil;
  20. @Override
  21. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  22. response.setContentType("text/html;charset=UTF-8");
  23. String token = request.getHeader("token");
  24. if(StringUtils.isEmpty(token)){
  25. this.needLogin(request,response);
  26. return false;
  27. }
  28. try {
  29. String redisKey = String.format(RedisKey.USER_TOKEN_KEY, token);
  30. if(redisUtil.hasKey(redisKey)){
  31. redisUtil.expire(redisKey,2 * 60 * 60);
  32. return true;
  33. }
  34. }catch (Exception e){
  35. log.error("校验token缓存出错", e);
  36. }
  37. this.needLogin(request,response);
  38. return false;
  39. }
  40. private void needLogin(HttpServletRequest request, HttpServletResponse response) {
  41. try {
  42. ResultData error = ResultData.error(ErrorCode.TOKEN_NOT_FOUND);
  43. response.getWriter().append(JSON.toJSONString(error));
  44. } catch (IOException e) {
  45. log.info("LoginInterceptor|needLogin|IOException|" + e);
  46. e.printStackTrace();
  47. }
  48. }
  49. }