内容简介: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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- RecyclerView使用指南(一)—— 基本使用
- 如何使用Meteorjs使用URL参数
- 使用 defer 还是不使用 defer?
- 使用 Typescript 加强 Vuex 使用体验
- [译] 何时使用 Rust?何时使用 Go?
- UDP协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
社群营销实战手册
秋叶、邻三月、秦阳 / 人民邮电出版社 / 2018-1 / 69.00元
互联网正从“物以类聚”,走向“人以群分”的时代。秋叶等人的“社群营销”,并非单纯靠社群卖东西,而是建立一种中心化的、自行运转的生态,让“同好”们形成紧密的联系,创造出海量营销机会。 《社群营销实战手册 从社群运营到社群经济》共5章内容,从社群的定位、建立、扩张、变现、运营,到社群的生命周期延长、社群运营团队的打造和管理以及社群管理工具,大量干货秘笈一应俱全,并提供丰富的运营实战案例,全面解读社群的......一起来看看 《社群营销实战手册》 这本书的介绍吧!