最近业余时间比较紧张,更得挤时间来记录了,今天介绍一下SpringBoot项目,如何使用过滤器和拦截器。
本文基于SpringBoot 2.2.5 RELEASE。
首先,介绍一下拦截器的使用办法,拦截器相对来说简单一些。
声明一个拦截器,和之前Spring MVC是一样的,继承自HandlerInterceptorAdapter,主要的代码如下:
public class TestInterceptor extends HandlerInterceptorAdapter{
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception{
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView view) throws Exception{
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
//可以进入处理器之前,自定义一些验证,比如是否登录
return true;
}
}
在声明拦截器之后,需要令其生效。就需要声明一个配置类,继承自WebMvcConfigurer,主要的代码如下:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer{
@Resource
private TestInterceptor testInterceptor;
@Bean
public TestInterceptor getTestInterceptor(){
return new TestInterceptor();
}
/**
* 拦截器注册
*/
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(testInterceptor);
}
需要注意的是,注解@EnableWebMvc不能丢失。
如果需要拦截特定的URL,可以使用addPathPatterns()方法。如果需要不拦截URL,可以使用excludePathPatterns()。
然后,介绍一下如何使用注解声明一个过滤器。
注解的方式很简单,就是使用@WebFilter,主要的代码如下:
@WebFilter(filterName = "testContext", urlPatterns = "/")
public class TestFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException{
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse res = (HttpServletResponse) servletResponse;
//此处可以加入自定义控制
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy(){
}
}
需要注意的是:
1. 必须在启动类增加注解:@ServletComponentScan,方可注册生效。
2. 按照Filter的类名排序。
最后,如果想自定义Filter的生效顺序,可以使用FilterRegistrationBean。
主要的代码如下:
@Bean
public FilterRegistrationBean testFilter(ErrorPageFilter filter){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new TestFilter());
filterRegistrationBean.setEnabled(true);
filterRegistrationBean.addUrlPatterns("/");
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
如果文中有误,欢迎指正。
觉的不错?可以关注我的公众号↑↑↑