spring boot过滤器FilterRegistrationBean
有2种方式可以实现过滤器
1:通过FilterRegistrationBean实例注册
2:通过@WebFilter注解生效
这里选择第一种,因为第二种不能设置过滤器之间的优先级
为了演示优先级,这里创建2个测试过滤器类:Test1Filter、Test2Filter
通过实现javax.servlet.Filter接口,覆盖其doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)方法,决定拦截或放行
public class Test1Filter implements Filter {
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest)arg0;
System.out.println("自定义过滤器filter1触发,拦截url:"+request.getRequestURI());
arg2.doFilter(arg0,arg1);
}
}
public class Test2Filter implements Filter {
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest)arg0;
System.out.println("自定义过滤器filter2触发,拦截url:"+request.getRequestURI());
arg2.doFilter(arg0,arg1);
}
}
通过在springboot的configuration中配置不同的FilterRegistrationBean实例,来注册自定义过滤器
这里创建一个configuration类
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import com.example.demo.filter.Test1Filter;
import com.example.demo.filter.Test2Filter; @Configuration
public class DemoConfiguration { @Bean
public FilterRegistrationBean<Test1Filter> RegistTest1(){
//通过FilterRegistrationBean实例设置优先级可以生效
//通过@WebFilter无效
FilterRegistrationBean<Test1Filter> bean = new FilterRegistrationBean<Test1Filter>();
bean.setFilter(new Test1Filter());//注册自定义过滤器
bean.setName("flilter1");//过滤器名称
bean.addUrlPatterns("/*");//过滤所有路径
bean.setOrder(1);//优先级,最顶级
return bean;
}
@Bean
public FilterRegistrationBean<Test2Filter> RegistTest2(){
//通过FilterRegistrationBean实例设置优先级可以生效
//通过@WebFilter无效
FilterRegistrationBean<Test2Filter> bean = new FilterRegistrationBean<Test2Filter>();
bean.setFilter(new Test2Filter());//注册自定义过滤器
bean.setName("flilter2");//过滤器名称
bean.addUrlPatterns("/test/*");//过滤所有路径
bean.setOrder(6);//优先级,越低越优先
return bean;
}
}
其中
1第一个bean拦截所有路径,而第二个只拦截/test/*路径
2第一个bean优先级设置了1,而第二个设置了6,越低越优先,所以过滤器1应该在过滤器2前面拦截
运行springboot,访问/test/*请求如下图,再访问/v请求如下图只拦截了过滤器1,而过滤器2路径不匹配

如果把.addUrlPatterns();中拦截路径改成一样/test/*,则所有请求,都会触发2个过滤器,而且过滤器1永远在最先拦截

spring boot过滤器FilterRegistrationBean的更多相关文章
- Spring Boot 之FilterRegistrationBean --支持web Filter 排序的使用(转)
Spring Boot 之FilterRegistrationBean --支持web Filter 排序的使用Spring 提供了FilterRegistrationBean类,此类提供setOr ...
- 【spring boot】FilterRegistrationBean介绍
前言 以往的javaee配置过滤器是在web.xml中配置的,如下代码 <filter> <filter-name>TestFilter</filter-name> ...
- (21)Spring Boot过滤器、监听器【从零开始学Spring Boot】
Spring Boot 系列博客] )前言[从零开始学Spring Boot] : http://412887952-qq-com.iteye.com/blog/2291496 )spring boo ...
- spring boot 过滤器、拦截器的区别与使用
原文:https://blog.csdn.net/heweimingming/article/details/79993591 拦截器与过滤器的区别: 1.过滤器和拦截器触发时机不一样,过滤器是在请求 ...
- 21. Spring Boot过滤器、监听器【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52069490 上一篇文章已经对定义Servlet 的方法进行了说明,过滤器(Filter) ...
- 八、 Spring Boot 过滤器、监听器
直接使用@WebFilter和@WebListener的方式,完成一个Filter 和一个 Listener.过滤器(Filter)文件MyFilter.Javapackage org.springb ...
- spring boot 过滤器 前后端分离跨域sessionId不一致
import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.http ...
- spring boot 过滤器实现接收 压缩数据 并解压
1.新加类GzipRequestWrapper 继承HttpServletRequestWrapper类 public class GzipRequestWrapper extends HttpSer ...
- 4. Spring Boot 过滤器、监听器
转自:https://blog.csdn.net/catoop/article/details/50501688
随机推荐
- Laravel 开发环境搭建
本人使用的是Laravel5.5版本,需要PHP7支持,所以安装的环境是Apache2.php7.0.mysql5.7,系统为ubuntu14.04LTS(14以下的版本对php7支持不够),主要参考 ...
- cookie中文转码
//cookie中文转码 var GB2312UnicodeConverter = { //转码 ToUnicode: function(str) { //中文转unicode return esca ...
- HDU3342:判断有向图中是否存在3元环-Tarjan或拓扑排序
题目大意: 给你一个关系图,判断是否合法.每个人都有师父和徒弟,可以有很多个: 若A是B的师父,B是C的师父,则A也算C的师父. 不合法: 1) . 互为师徒:(有回路) 2) .你的师父是你徒弟 ...
- Always On主辅延迟相关描述
延迟是AlwaysOn最大的敌人之一 延迟是AlwaysON的最大敌人之一.对AlwaysON而言,其首要目标就尽量减少(无法避免)主副本.辅助副本的数据延迟,实现主副本.辅助副本的“数据同步”.只有 ...
- spring-helloworld (1)
目录 一.eclipse安装springsource-tools插件 二.新建maven工程,引入spring配置 三.添加helloworld类 四.使用springsource-tools插件 创 ...
- Java--会移动、反弹的球
package firstpack; import java.awt.*; public class MyStar { public static void main(String[] args) { ...
- 使用bash关联数组统计单词
使用bash关联数组统计单词 从bash 4开始支持关联数组,使用前需要声明,即 declare -A map map[key1]=value1 map[key2]=value2 map=([key1 ...
- python+tushare获取A股所有股票代码和名称列表
接口:stock_basic 描述:获取基础信息数据,包括股票代码.名称.上市日期.退市日期等 注:tushare模块下载和安装教程,请查阅我之前的文章 输入参数 名称 | 类型 ...
- Web UI 设计(网页设计)命名规范
Web UI 设计命名规范 一.网站设计及基本框架结构: 1. Container“container“ 就是将页面中的所有元素包在一起的部分,这部分还可以命名为: “wrapper“, “wr ...
- 几个实用的js函数
在阅读JavaScript DOM编程艺术这本书时看到了一些比较实用的代码. //加载多个window.onload事件 function addLoadEvent(func) { var oldon ...