package com.fdkankan.agent.interceptor; import cn.hutool.http.ContentType; import com.alibaba.fastjson.JSONObject; import com.fdkankan.agent.common.ResultCode; import com.fdkankan.agent.common.ResultData; import com.fdkankan.redis.constant.RedisKey; import com.fdkankan.redis.util.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpHeaders; import org.apache.tomcat.util.http.MimeHeaders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Field; @Component @Slf4j public class TokenInterceptor implements HandlerInterceptor { @Autowired private RedisUtil redisUtil; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { response.setContentType("text/html;charset=UTF-8"); String token = request.getHeader("token"); if( request.getMethod().equals("GET")){ if(StringUtils.isBlank(token)){ return true; } } if(StringUtils.isEmpty(token)){ this.needLogin(request,response); return false; } try { String fdToken = String.format(RedisKey.TOKEN_V3,token); if( redisUtil.hasKey(fdToken)){ redisUtil.expire(fdToken,6 * 60 * 60); return true; } }catch (Exception e){ e.printStackTrace(); } this.needLogin(request,response); return false; } private void needLogin(HttpServletRequest request, HttpServletResponse response) { try { String result = JSONObject.toJSONString(ResultData.error(ResultCode.USER_NOT_LOGIN)); response.getWriter().append(result); } catch (IOException e) { log.info("LoginInterceptor|needLogin|IOException|" + e); e.printStackTrace(); } } /** * 修改header信息,key-value键值对儿加入到header中 */ private void reflectSetparam(HttpServletRequest request,String key,String value){ Class requestClass = request.getClass(); System.out.println("request实现类="+requestClass.getName()); try { Field request1 = requestClass.getDeclaredField("request"); request1.setAccessible(true); Object o = request1.get(request); Field coyoteRequest = o.getClass().getDeclaredField("coyoteRequest"); coyoteRequest.setAccessible(true); Object o1 = coyoteRequest.get(o); System.out.println("coyoteRequest实现类="+o1.getClass().getName()); Field headers = o1.getClass().getDeclaredField("headers"); headers.setAccessible(true); MimeHeaders o2 = (MimeHeaders)headers.get(o1); o2.addValue(key).setString(value); } catch (Exception e) { e.printStackTrace(); } } }