SpringBoot之过滤器Filter
2017-12-28 11:24
357 查看
Filter简介
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。Filter实现
继承Filter接口@Component @WebFilter(filterName="过滤器名称", urlPatterns = "/*") //过滤地址 public class TimeFilter implements Filter { private Logger logger = Logger.getLogger(this.getClass()); /** * 容器启动时初始化init * @param filterConfig * @throws ServletException */ @Override public void init(FilterConfig filterConfig) throws ServletException { logger.info("==============TimeFilter初始化===================="); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { logger.info("==============进入doFilter===================="); long l = System.currentTimeMillis(); filterChain.doFilter(servletRequest, servletResponse); logger.info("==============退出doFilter====================耗时:" + (System.currentTimeMillis() - l)); } @Override public void destroy() { logger.info("==============TimeFilter销毁===================="); } }
实际继承Filter接口,添加@Component,@WebFilter后一个过滤器就已经实现了。
init(FilterConfig filterConfig):容器启动时就执行此方法,FilterConfig 有什么属性呢?
String getFilterName();//得到filter的名称。 String getInitParameter(String name);//返回在部署描述中指定名称的初始化参数的值。如果不存在返回null. Enumeration getInitParameterNames();//返回过滤器的所有初始化参数的名字的枚举集合。 public ServletContext getServletContext();//返回Servlet上下文对象的引用。
doFilter:这是过滤器核心方法,客户端请求我们接口时,先执行
filterChain.doFilter(servletRequest, servletResponse);前面的方法,当执行到
filterChain.doFilter方法时,会到相应请求接口(或下一个过滤器),接口返回后,会
跳到filterChain.doFilter后面的代码。
destroy():容器销毁后执行此方法,主要进行一些清除操作。
注册bean方法实现
上面实现是通过@Component,@WebFilter方法实现的,在springBoot中可以以注册bean的方法(不写那两个注解)实现@Configuration public class TimeFilerConfig { /** * 注册自定义TimeFilter的bean */ @Bean(name = "timeFilter") public FilterRegistrationBean timeFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); Filter timeFilter = new TimeFilter(); filterRegistrationBean.setFilter(timeFilter); //设置拦截路径 ArrayList<String> urls = new ArrayList<>(); urls.add("/*"); filterRegistrationBean.setUrlPatterns(urls); //如果多个Filter,指定Filter的顺序,数字越小越先开始 filterRegistrationBean.setOrder(10); return filterRegistrationBean; } }
FilterRegistrationBean 还有其它的属性设值方式,自行查找资料。
如果注册多个Filter如何实现?
@Configuration public class TimeFilerConfig { /** * 注册自定义TimeFilter的bean */ @Bean(name = "timeFilter") public FilterRegistrationBean timeFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); Filter timeFilter = new TimeFilter(); filterRegistrationBean.setFilter(timeFilter); //设置拦截路径 ArrayList<String> urls = new ArrayList<>(); urls.add("/*"); filterRegistrationBean.setUrlPatterns(urls); //如果多个Filter,指定Filter的顺序,数字越小越先开始 filterRegistrationBean.setOrder(10); return filterRegistrationBean; } /** * 注册自定义timeTwoFilter的bean */ @Bean(name = "timeTwoFilter") public FilterRegistrationBean timeTwoFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); Filter timeFilter = new TimeTwoFilter(); filterRegistrationBean.setFilter(timeFilter); //设置拦截路径 ArrayList<String> urls = new ArrayList<>(); urls.add("/*"); filterRegistrationBean.setUrlPatterns(urls); //如果多个Filter,指定Filter的顺序 filterRegistrationBean.setOrder(5); return filterRegistrationBean; } }
执行流程
单个Filter多个Filter
应用
请参考我的另一篇博客:springBoot之过滤器解决前端跨域问题拦截器和过滤器区别参考:http://blog.csdn.net/Kincym/article/details/78920918
相关文章推荐
- SpringBoot系列<八>过滤器filter和监听器listener配置
- spring boot---WebFilter注解 实现自定义登录过滤器
- Spring boot中使用过滤器filter
- springboot新增过滤器Filter
- Spring Boot的filter(过滤器)简单使用实例详解
- Spring Boot学习之旅:(八)过滤器 Filter
- spring-boot使用Filter
- spring boot / cloud (一) 使用filter防止XSS
- Spring Boot 过滤器、监听器
- JAVA WEB 过滤器(Filter)中向容器 Spring 注入 bean
- Spring字符集过滤器CharacterEncodingFilter
- 18.玩转Spring Boot 注册Servlet、Filter、Listener
- JSP spring boot / cloud 使用filter防止XSS
- Spring Boot (九):过滤器、拦截器、监听器
- Spring字符集过滤器CharacterEncodingFilter
- spring boot errorPageFilter 冲突问题。
- java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/FilterRegistrationBean
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- Spring Boot 过滤器、监听器
- Spring Boot实战之Filter实现使用JWT进行接口认证