大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
-
过滤器和拦截器区别
觉得这个总结的很好,所以用来借鉴借鉴
摘抄于网络,侵删 -
过滤器和拦截器执行顺序
在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获取请求的一些方法的内容
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172388.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...