SpringBoot中使用Filter和Interceptor

栏目: Java · 发布时间: 6年前

内容简介:Filter接口定义在自定义的过滤器需要实现通过

Filter接口定义在 javax.servlet 包中,是Servlet规范定义的,作用于Request/Response前后,被Servlet容器调用,Filter不能使用Spring容器资源。

实现一个Filter

自定义的过滤器需要实现 javax.servlet.Filter ,Filter接口中有三个方法:

  • init(FilterConfig filterConfig) :过滤器初始化的被调用。

  • doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) :在 doFilter() 方法中, chain.doFilter() 前的一般是对request执行的过滤操作, chain.doFilter 后面的代码一般是对response执行的操作, chain.doFiter() 执行下一个过滤器或者业务处理器。

  • destory() :过滤器销毁的时候被调用。

在Spring容器中使用过滤器

  • 通过FilterRegistrationBean
@Configuration
 public class WebConfig{
    @Bean
    public FilterRegistrationBean xxxFilter() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new xxxFilter());
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        registrationBean.setOrder(1); // 过滤器的优先级
        return registrationBean;
    }
}    
复制代码
  • 通过 @WebFilter@ServletComponentScan

通过 @WebFilter 的方式定义Filter,默认使用Filter的类名设置优先级。使用 FilterRegistrationBean 可以指定优先级。Filter使用白名单过滤Url的方式,配置需要拦截的Url,如果想设置不过滤某些Url需要在 doFilter 方法中指定。

二、Interceptor(拦截器)

定义一个Interceptor需要实现 org.springframework.web.servlet.HandlerInterceptor 接口,Interceptor是Spring容器定义的,它可以使用Spring容器的任何资源,只要通过IoC注入到Interceptor即可,Interceptor可以深入到业务处理方法的执行前后和抛出异常的时候,而Filerter无法做到这一点,所以Interceptor相比Filter具有更大的弹性。

实现一个Interceptor

实现 HandlerInterceptor 或者继承 HandlerInterceptorAdapter

public interface HandlerInterceptor {
   default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       return true;
   }

   default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
   }

   default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
   }
}
复制代码
  • preHandle:在业务处理器处理请求之前被调用。

  • postHandle:在业务处理器处理请求后并生成视图前被调用,此时有机会修改ModelAndView。

  • afterCompletion:业务处理处理器处理完请求后(已经渲染视图)被执行,并可以处理业务方法发生异常的场景。

在Spring容器中使用拦截器

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration registration = registry.addInterceptor(new TimeInterceptor());
        registration.excludePathPatterns("/user");
        registration.excludePathPatterns("/*");
    }
}    
复制代码

Interceptor既可以指定要过滤的Url也可以指定不拦截的Url,缺省情况拦截所有Url。


以上所述就是小编给大家介绍的《SpringBoot中使用Filter和Interceptor》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

IT大败局

IT大败局

Merrill R.Chapman、周良忠 / 周良忠 / 电子工业出版社 / 2004-8-1 / 35.00

这是一本由作者亲身经历写就的MBA式教案。通过作者那专业人士的敏锐、活泼流畅的文笔和美国人特有的幽默,本书为我们剖析了IT界十个有代表性且影响深远的愚蠢败局。这十个败局涉及企业经营的十个主要方面,它们是:产业标准的魔力,“缩水”产品的阴霾,产品定位的泥潭,市场关系的教训,巨型企业的困惑,企业并购的陷阱,品牌战略的迷茫,技术导向的失衡,企业公关的真谛和科技虚幻的诱惑。 书中有许多鲜为人......一起来看看 《IT大败局》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码