-
过滤器和拦截器区别
觉得这个总结的很好,所以用来借鉴借鉴
摘抄于网络,侵删 -
过滤器和拦截器执行顺序
在SpringBoot中编写测试代码- 自定义过滤器
/*** @Author: xiaoshijiu* @Date: 2019/5/22* @Description: 自定义过滤器*/ public class MyFilter extends HttpFilter {@Overridepublic 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 {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {System.out.println("Interception----before");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("Interception----before2");}@Overridepublic 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>*/@Beanpublic FilterRegistrationBean myFilter() {return new FilterRegistrationBean(new MyFilter());}@Overridepublic 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获取请求的一些方法的内容