1.首先要配置一个配置文件类sql
@Configuration public class SpringbootIntercepterConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/user/login/**", "/swagger-resources/**","/user/register/**", "/shortMessage/**", "/user/makesure/**","/user/has/**","/attachment/**"); super.addInterceptors(registry); } }
2.配置拦截器json
/** * token拦截器 * * @author sqc * @date 2018/8/2 */ @Component public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token = request.getHeader("token"); //若是不是映射到方法直接经过 if (!(handler instanceof HandlerMethod)) { return true; } if(token==null||token.equals("")){ printJson(response, ""); return false; } User user = (User)getRedisService().get(REDIS_USER_SESSION_KEY+":"+token); if(user==null){ printJson(response, ""); return false; } String userId = user.getId(); User sqlUser = getUserService().getUserById(userId); String enterpriseId = getUserEnterpriseService().selectEnterpriseByUser(userId); if(enterpriseId==null){ getRedisService().set(REDIS_USER_SESSION_KEY+":"+token,sqlUser,SSO_SESSION_EXPIRE); return true; } Enterprise sqlEnterprise = getEnterpriseService().selectEnterpriseById(enterpriseId); getRedisService().set(REDIS_USER_SESSION_KEY+":"+token,sqlUser,SSO_SESSION_EXPIRE); getRedisService().set(REDIS_ENTERPRISE_SESSION_KEY+":"+token,sqlEnterprise,SSO_SESSION_EXPIRE); return true; } @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 { response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, X-Requested-With, token"); response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS, POST, PUT, DELETE"); response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Max-Age", "3600"); // vary: Origin // Vary: Access-Control-Request-Method // Vary: Access-Control-Request-Headers // Access-Control-Allow-Origin: * } private static void printJson(HttpServletResponse response, String code) { ResponseResult responseResult = new ResponseResult(10086,false,"token过时,请从新登录",null); String content = JSON.toJSONString(responseResult); printContent(response, content); } private static void printContent(HttpServletResponse response, String content) { try { response.reset(); response.setContentType("application/json"); response.setHeader("Cache-Control", "no-store"); response.setCharacterEncoding("UTF-8"); PrintWriter pw = response.getWriter(); pw.write(content); pw.flush(); } catch (Exception e) { e.printStackTrace(); } } private EnterpriseService getEnterpriseService(){ return SpringContextHolder.getBean(EnterpriseService.class); } private RedisService getRedisService(){ return SpringContextHolder.getBean(RedisService.class); } private UserEnterpriseService getUserEnterpriseService(){ return SpringContextHolder.getBean(UserEnterpriseService.class); } private UserService getUserService(){ return SpringContextHolder.getBean(UserService.class); } }