过滤器和拦截器区别 觉得这个总结的很好,所以用来借鉴借鉴 摘抄于网络,侵删
过滤器和拦截器执行顺序 在SpringBoot中编写测试代码
自定义过滤器 /** * @Author: xiaoshijiu * @Date: 2019/5/22 * @Description: 自定义过滤器 */ public class MyFilter extends HttpFilter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("Filter----before"); chain.doFilter(request,response); System.out.println("Filter----after"); } }自定义拦截器 (有关SpringMVC的拦截器知识原理,可以参照我之前的博客) SpringMVC拦截器详解 SpringMVC拦截器执行顺序原理解释
/** * @Author: xiaoshijiu * @Date: 2019/5/22 * @Description: $value$ */ public class MyInterception implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("Interception----before"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("Interception----before2"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("Interception----after"); } } 配置拦截器和过滤器 /** * @Author xiaoshijiu * @Description 自定义Mvc配置,实现全面接管SpringMvc的配置 * @Date 2019/5/13 */ @Configuration public class MyWebMvc implements WebMvcConfigurer { /** * 注册自定义的filter 就相当于在普通web工程中,在web.xml中注册的<filter></filter> */ @Bean public FilterRegistrationBean myFilter() { return new FilterRegistrationBean(new MyFilter()); } @Override public void addInterceptors(InterceptorRegistry registry) { // 添加自定义的拦截器 registry.addInterceptor(new MyInterception()).addPathPatterns("/hello"); } } 编写Controller,测试 /** * @Author: xiaoshijiu * @Date: 2019/5/22 * @Description: 测试Controller */ @RestController public class Mycontroller { @RequestMapping("hello") public String hello() { System.out.println("hello...来了"); return "hello"; } } 打印结果 这里可以看到拦截器和过滤器的执行顺序,对照着上面他们的区别也是很好理解的 总结一下,执行顺序 这里还有一个问题就是发送/hello请求filter被执行了两次,我们可以获取url来判别一下 自定义过滤器添加代码 HttpServletRequest servletRequest = (HttpServletRequest) request; System.out.println(servletRequest.getRequestURI());可以看到SpringBoot项目会发送图标的请求(/favicon.ico) 最后在补充一下,request获取请求的一些方法的内容