TokenInterceptor.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package com.fdkankan.agent.interceptor;
  2. import cn.hutool.http.ContentType;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.fdkankan.agent.common.ResultCode;
  5. import com.fdkankan.agent.common.ResultData;
  6. import com.fdkankan.redis.constant.RedisKey;
  7. import com.fdkankan.redis.util.RedisUtil;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.apache.http.HttpHeaders;
  11. import org.apache.tomcat.util.http.MimeHeaders;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Component;
  14. import org.springframework.web.servlet.HandlerInterceptor;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17. import java.io.IOException;
  18. import java.lang.reflect.Field;
  19. @Component
  20. @Slf4j
  21. public class TokenInterceptor implements HandlerInterceptor {
  22. @Autowired
  23. private RedisUtil redisUtil;
  24. @Override
  25. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  26. response.setContentType("text/html;charset=UTF-8");
  27. String token = request.getHeader("token");
  28. if( request.getMethod().equals("GET")){
  29. if(StringUtils.isBlank(token)){
  30. return true;
  31. }
  32. }
  33. if(StringUtils.isEmpty(token)){
  34. this.needLogin(request,response);
  35. return false;
  36. }
  37. try {
  38. String fdToken = String.format(RedisKey.TOKEN_V3,token);
  39. if( redisUtil.hasKey(fdToken)){
  40. redisUtil.expire(fdToken,6 * 60 * 60);
  41. return true;
  42. }
  43. }catch (Exception e){
  44. e.printStackTrace();
  45. }
  46. this.needLogin(request,response);
  47. return false;
  48. }
  49. private void needLogin(HttpServletRequest request, HttpServletResponse response) {
  50. try {
  51. String result = JSONObject.toJSONString(ResultData.error(ResultCode.USER_NOT_LOGIN));
  52. response.getWriter().append(result);
  53. } catch (IOException e) {
  54. log.info("LoginInterceptor|needLogin|IOException|" + e);
  55. e.printStackTrace();
  56. }
  57. }
  58. /**
  59. * 修改header信息,key-value键值对儿加入到header中
  60. */
  61. private void reflectSetparam(HttpServletRequest request,String key,String value){
  62. Class<? extends HttpServletRequest> requestClass = request.getClass();
  63. System.out.println("request实现类="+requestClass.getName());
  64. try {
  65. Field request1 = requestClass.getDeclaredField("request");
  66. request1.setAccessible(true);
  67. Object o = request1.get(request);
  68. Field coyoteRequest = o.getClass().getDeclaredField("coyoteRequest");
  69. coyoteRequest.setAccessible(true);
  70. Object o1 = coyoteRequest.get(o);
  71. System.out.println("coyoteRequest实现类="+o1.getClass().getName());
  72. Field headers = o1.getClass().getDeclaredField("headers");
  73. headers.setAccessible(true);
  74. MimeHeaders o2 = (MimeHeaders)headers.get(o1);
  75. o2.addValue(key).setString(value);
  76. } catch (Exception e) {
  77. e.printStackTrace();
  78. }
  79. }
  80. }