专业的JAVA编程教程与资源

网站首页 > java教程 正文

面试官:SpringBoot拦截器和过滤器的区别是什么都不知道?

temp10 2024-11-04 14:08:09 java教程 8 ℃ 0 评论

前言:

前几天公司招聘Java程序员,来了个毕业快3年的小伙,公司的后台大佬去面试他,几分钟后我就看见那小伙尴尬的走出了会议室,我一猜就知道面试没过关了。后来我问大佬他是不是面试没通过?大佬没耐心的说了句:Spring拦截器和过滤器的区别都不知道

那么为了防止大家在面试中出现这种尴尬的场景,今天我们来看一下拦截器和过滤器到底有什么区别呢?

面试官:SpringBoot拦截器和过滤器的区别是什么都不知道?

一:过滤器和拦截器区别

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前后,只能使用过滤器。

好了,今天的文章就到这里了,喜欢的话记得点赞哦,谢谢观看!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表