package com.yuanchu.tms.config; import com.yuanchu.tms.utils.JackSonUtil; import com.yuanchu.tms.utils.Jwt; import com.yuanchu.tms.utils.RedisUtil; import com.yuanchu.tms.vo.Result; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; @Component public class FiferConfig implements HandlerInterceptor { @Value("${server.port}") private String serverPort; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); return true; } String[] strs = request.getRequestURL().toString().split(serverPort); AtomicBoolean judge = new AtomicBoolean(false); list.forEach(a -> { if (strs[1].equals(a)) { judge.set(true); return; } else if (a.indexOf("/**") > -1) { if (strs[1].indexOf(a.replace("/**", "")) == 0) { judge.set(true); return; } } }); if (judge.get()) return true; response.setContentType(MediaType.APPLICATION_JSON_VALUE); response.setCharacterEncoding("UTF-8"); String token = request.getHeader("token"); Map map = new Jwt().readJWT(token); if (map.get("state").equals("0")) { String redisToken = String.valueOf(RedisUtil.get(JackSonUtil.unmarshal(map.get("data"), Map.class).get("id").toString())); if (!redisToken.equals(token)) { map.put("info", "不存在的token"); map.put("state", "2"); } else { return true; } } PrintWriter out = response.getWriter(); out.print(new Result<>().fail(401,map.get("info"))); switch (map.get("state")){ case "1": response.setStatus(401); break; case "2": response.setStatus(402); break; } return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // System.out.println("-------------------------拦截器校验通过---------------------------"); } private List list; private FiferConfig() { List list = new ArrayList<>(); list.add("/error"); list.add("/user/enter"); list.add("/user/refresh"); this.list = list; } }