大家好,又见面了,我是你们的朋友全栈君。
过滤器和拦截器区别
觉得这个总结的很好,所以用来借鉴借鉴 摘抄于网络,侵删
过滤器和拦截器执行顺序 在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拦截器执行顺序原理解释
代码语言:javascript复制/** * @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获取请求的一些方法的内容
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172388.html原文链接:https://javaforall.cn