网站首页 > java教程 正文
前言:
前几天公司招聘Java程序员,来了个毕业快3年的小伙,公司的后台大佬去面试他,几分钟后我就看见那小伙尴尬的走出了会议室,我一猜就知道面试没过关了。后来我问大佬他是不是面试没通过?大佬没耐心的说了句:Spring拦截器和过滤器的区别都不知道。
那么为了防止大家在面试中出现这种尴尬的场景,今天我们来看一下拦截器和过滤器到底有什么区别呢?
一:过滤器和拦截器区别
1.本质的区别:
Filter过滤器是Servlet定义的规范,是Servlet容器支持的。而拦截器是Spring框架定义的,被Spring所支持。
2.使用范围不同:
Filter过滤器只能用户Web程序中,而拦截器既可以在Web程序中使用也可以在Application等程序中使用。
3.功能深度不同:
Filter过滤器只能在Servlet的前后起作用,而拦截器可以深入到方法的前后进行拦截,所以拦截器的功能更加强大,并且还可以使用Spring中任何一个资源和对象。
4.触发时机不同:
过滤器是在请求进入Web容器后,但请求进入servlet之前进行预处理的,等到Servlet处理完后返回。
二:过滤器如何实现
在SpringBoot中要想实现过滤器,需要实现Filter接口,代码如下:
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("MyFilter init ");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest) request;
System.out.println("MyFilter doFilter"+req.getParameter("name"));
chain.doFilter(request, response);
return ;
}
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("MyFilter destroy");
}
}
实现完Filter接口后,我们还需要配置过滤器的过滤路径,这里我们编写配置类FilterConfig,并创建过滤器注册类,FilterRegistrationBean。
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new MyFilter());
//指定过滤器的执行顺序
filterRegistrationBean.setOrder(2);
//指定过滤路径
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
拦截器的实现,我前一篇文章已经讲过了,这里我就不重复去说了,不知道可以去看我前一篇文章。
总结:
那我们该什么时候使用过滤器,又什么时候使用拦截器呢?
- 如果是非spring项目,那么拦截器不能用,只能使用过滤器。
- 如果是处理controller前后,既可以使用拦截器也可以使用过滤器。
- 如果是处理dispaterServlet前后,只能使用过滤器。
好了,今天的文章就到这里了,喜欢的话记得点赞哦,谢谢观看!
猜你喜欢
- 2024-11-04 【快学springboot】12.实现拦截器
- 2024-11-04 Spring Boot 中的拦截器和过滤器到底有什么区别?
- 2024-11-04 SpringBoot中的过滤器和拦截器有什么区别?
- 2024-11-04 为什么你写的拦截器注入不了Java bean?
- 2024-11-04 使用Spring Cloud Zuul实现过滤器或拦截器功能案例
- 2024-11-04 java服务-springboot拦截器实现用户登录Token及权限校验
- 2024-11-04 JAVAEE就业工程师教程之第4章 Struts2拦截器
- 2024-11-04 Spring框架功能分为哪些模块?(spring框架有哪几部分组成)
- 2024-11-04 高级码农Spring Boot实战进阶之过滤器、拦截器的使用
- 2024-11-04 轻量级 Java 权限认证框架Sa-Token初体验(五)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)