TokenInterceptor.java 2.0 KB

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