Filter在springboot中的使用方法详解
Filter 过滤器
Filter何时进行url过滤
filter(过滤器)作用于在intreceptor(拦截器)之前,不像intreceptor一样依赖于springmvc框架,只需要依赖于serverlet。
Filter在spring /springboot中如何使用
1.自定义Filter
比较原始的一种方法是定义一个MyFilter实现javax.servlet.Filter接口
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 对request或 response 进行处理
// 调用filter链中的下一个filter
filterChain.doFilter(servletRequest,servletResponse);
}
}另一种方法的自定义Filter,继承springframework.web.filter.OncePerRequestFilter,可以对同一个请求,只经过一次过滤
public class MyFilter extends OncePerRequestFilter {
/**此处不能@override doFilter方法
* 因为OncePerRequestFilter中 doFilter方法已经是final
*
*/
//自定义处理方法
public void interrupt(HttpServletResponse response, ErrorCode code){
//此处对response进行处理
}
//重载OnecePerRequestFilter方法
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){
//调用自定义处理方法
interrupt(response,code);
//对request 、response进行处理
}
}OncePerRequestFilter中的方法
| 修饰符和类型 | 方法和描述 |
| void | doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 此doFilter实现存储“已过滤”的请求属性,如果属性已经存在,则继续进行而不再过滤。 |
| protected abstract void | doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)和doFilter相同功能,但保证在单个请求线程中每个请求只调用一次。 |
| protected java.lang.String | getAlreadyFilteredAttributeName() 返回标识已过滤请求的请求属性的名称。 |
| protected boolean | isAsyncDispatch(HttpServletRequest request) javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的调度程序类型意味着可以在单个请求的过程中在多个线程中调用过滤器。 |
| protected boolean | isAsyncStarted(HttpServletRequest request) 请求处理是否处于异步模式,这意味着在退出当前线程后不会提交响应 |
| protected boolean | shouldNotFilter(HttpServletRequest request) 可以在子类中重写以进行自定义筛选控制,返回true以避免过滤给定的请求。 |
| protected boolean | shouldNotFilterAsyncDispatch() javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的调度程序类型意味着可以在单个请求的过程中在多个线程中调用过滤器。 |
| protected boolean | shouldNotFilterErrorDispatch() 是否过滤错误调度,例如servlet容器处理和映射错误时web.xml |
2.注册自定义Filter
在springboot中可以写一个配置类,使用@Bean注入myFilterBean
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@Configuration
public class MyFilterConfig {
@Bean
public FilterRegistrationBean myFilterBean(MyFilter filter) {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(filter);//设置为自定义的过滤器MyFilter
filterRegistrationBean.addUrlPatterns("/*");//拦截所有请求
filterRegistrationBean.setOrder(1);//优先级为1
return filterRegistrationBean;
}
//可注册多个自定义的过滤器
}如果是使用xml配置则在web.xml配置如下( 注意配置多个filter时优先级由filter的配置顺序决定优先级)
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.text.filter.myFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>到此这篇关于Filter在springboot中的使用方法详解的文章就介绍到这了,更多相关Filter使用方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
IDEA2020.2.3 "reading maven projects"卡住的问题
这篇文章主要介绍了IDEA2020.2.3 "reading maven projects"卡住的问题及问题原因探究,通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2020-10-10
Java解决No enclosing instance of type PrintListFromTailToHead
这篇文章主要介绍了Java解决No enclosing instance of type PrintListFromTailToHead is accessible问题的两种方案的相关资料,需要的朋友可以参考下2016-07-07
mapstruct的用法之qualifiedByName示例详解
qualifiedByName的意思就是使用这个Mapper接口中的指定的默认方法去处理这个属性的转换,而不是简单的get set,今天通过本文给大家介绍下mapstruct的用法之qualifiedByName示例详解,感兴趣的朋友一起看看吧2022-04-04
基于mybatis-plus QueryWrapper 排序的坑
这篇文章主要介绍了mybatis-plus QueryWrapper 排序的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01
java环境变量为什么要配置path和classpath详细解答
为何配置path?为何配置classpath?当时初学java时只是关心如何做而不去关心这些问题,接下来介绍一下,感兴趣的朋友可以参考下哦2013-01-01
SpringBoot 自定义starter yaml提示失效问题及解决方法
在自定义starter后,必不可少会有properties配置参数需要指定,而在有时又不知道为什么出现这个问题,这篇文章主要介绍了SpringBoot 自定义starter yaml提示失效问题,需要的朋友可以参考下2022-12-12


最新评论