filter:
1: 在启动类上加一个注解 @ServletComponentScan(basePackages=“需要扫描的过滤器”)
2: 新建myFilter 继承接口 Filter
3:在myFilter 上添加 @WebFilter(filterName=“过滤器名称” urlPatterns=“过滤规则” )
4:重写 三大方法 doFilter , init ,destroy
注意: 三个方法最好都重写一遍, 不要只重写 doFilter 方法。 在tomcat9.0一下版本部署可能失败。 因为有的tomcat内部父类组件 的三大方法有可能是普通方法。
详见:https://blog.youkuaiyun.com/ieen_csdn/article/details/86612492
注意: 在使用@WebFilter + @Order 时, Order是失效的。 过滤器执行顺序依然按照过滤器名称进行先后顺序的注册。
自定义过滤器类上注解可以使用的组合方式有:
@Component + @Order : 此时过滤器执行顺序排序是有效的, 但是过滤器不能指定拦截的url , 只能默认拦截全部
@WebFilter + @ServletComponentScan 此时 可以指定要拦截的url , 但是不能指定过滤器执行顺序
JavaConfig-FilterRegistrationBean(在启动类配置拦截器,此时自定义过滤器不加注解,为普通类即可) 可以指定过滤器要拦截的url 和 过滤器执行顺序, 但需要代码方式实现
注意: 过滤器中不能自动注入bean 对象。
因为过滤器执行顺序高于servlet , 在执行过滤器时bean对象还没有被实例化。
如果同时使用 @Component + @Order + @WebFilter + @ServletComponentScan , 同一个过滤器会被执行两次!
示例代码:
启动类:
@ServletComponentScan(basePackages = "com.diting.hb2.fastdevlop.commons.filter")
自定义过滤器:
@WebFilter(urlPatterns = "/*")
public class TestFilter01 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("-----------执行过滤器01----------------");
filterChain.doFilter(servletRequest ,servletResponse);
System.out.println("-----------过滤器放行01----------------");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
本文详细介绍了Spring框架中Web Filter的配置方法,包括如何通过注解实现过滤器的注册及注意事项,例如@ServletComponentScan与@WebFilter的使用,以及自定义过滤器的实现步骤。
1201

被折叠的 条评论
为什么被折叠?



