在上一篇文章主要讲述了过滤器,也提到了spring框架适合使用拦截器,所以就整理了一下用到的案例。
在springboot2.0以后要继承HandlerInterceptorAdapter,2.0之前的版本请自行百度。
具体如下:
public class RequestInterceptor extends HandlerInterceptorAdapter { private static Logger logger = Logger.getLogger(RequestInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Boolean flag = false; System.out.println("preHandle start..."); String token; PrintWriter writer = null; response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); //获取header的token进行认证 if (request.getHeader("token") != null || !"".equals(request.getHeader("token"))){ token = request.getHeader("token"); //进行token校验 Map<String, String> params = new HashMap<>(); params.put("access_token", token); //todo:校验需要访问的url,以及你的业务 try{ writer = response.getWriter(); writer.print("url的返回结果"); } catch (IOException e) { logger.error("response error",e); } finally { if (writer != null) writer.close(); } }else { //没有token处理 writer = response.getWriter(); String error = "用户未登录"; writer.print(error); } return flag; } }
同样,也需要配置@Configuration
@Configuration public class InterceptorConfig extends WebMvcConfigurationSupport { @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/*").excludePathPatterns("/api/Login/UserLogin"); super.addInterceptors(registry); } }
同时也不要忘记在Application加上@ComponentScan。
最后,在你请求访问的时候,拦截器会拦截你所要拦截的请求,达到你想要的结果。