SpringBoot 手写过滤器&加载第三方过滤器
如何手写一个过滤器呢。假设我现在需要一个计时过滤器,我想把每一次调用服务锁花费的时间打印到控制台,我该怎么做呢?
拦截机制有三种:
1. 过滤器(Filter)能拿到http请求,但是拿不到处理请求方法的信息。
2. 拦截器(Interceptor)既能拿到http请求信息,也能拿到处理请求方法的信息,但是拿不到方法的参数信息。
3. 切片(Aspect)能拿到方法的参数信息,但是拿不到http请求信息。
他们三个各有优缺点,需要根据自己的业务需求来选择最适合的拦截机制。
好了下面开始正文。
本教程大概目录:
1. 手写过滤器
2. 加载第三方过滤器
好了,开始正文。
1. 手写过滤器
特别容易,继承Filter ,然后根据需求重写它的三个方法。
/** * TimeFilter 计时过滤器 * Created by Fant.J. */ @Component public class TimeFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("time filter init"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("time filter start"); long start = new Date().getTime(); filterChain.doFilter(servletRequest,servletResponse); System.out.println("耗时:"+(new Date().getTime() - start)); System.out.println("time filter finish"); } @Override public void destroy() { System.out.println("time filter destroy"); } }
其中 init方法是初始化方法,最先执行。
然后执行doFilter方法,熟悉servlet的应该都知道,它其实就是调用业务。
最后destroy方法,是最后执行的。
然后我们启动服务,随便调用一个controller,控制台打印如下:
2. 加载第三方过滤器
一般在开发的时候,我们可能用到第三方的过滤器,我们不可能在其源码上添加@Component
注解。所以我们必须写一个配置类来引入它。
下面我们把上面的例子当作第三方过滤器,把TimeFilter类上面的@Component注解去掉。做一个模拟练习。
/** * 引入第三方过滤器 将其放入spring容器 * Created by Fant.J. */ @Configuration public class WebConfig { @Bean public FilterRegistrationBean timeFilter(){ //创建 过滤器注册bean FilterRegistrationBean registrationBean = new FilterRegistrationBean(); TimeFilter timeFilter = new TimeFilter(); registrationBean.setFilter(timeFilter); List urls = new ArrayList(); urls.add("/*"); //给所有请求加过滤器 //设置 有效url registrationBean.setUrlPatterns(urls); return registrationBean; } }
注意一定要去掉TimeFilter类上面的@Component注解,否则过滤器会失效。
介绍下我的所有文集:
流行框架
SpringCloud
springboot
nginx
redis
底层实现原理:
Java NIO教程
Java reflection 反射详解
Java并发学习笔录
Java Servlet教程
jdbc组件详解
Java NIO教程
Java语言/版本 研究

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python 爬取了马蜂窝的出行数据,告诉你这个夏天哪里最值得去!
正值火辣的暑假,朋友圈已经被大家的旅行足迹刷屏了,真的十分惊叹于那些把全国所有省基本走遍的朋友们。与此同时,也就萌生了写篇旅行相关的内容,本次数据来源于一个对于爬虫十分友好的旅行攻略类网站:蚂蜂窝。 一、获得城市编号 蚂蜂窝中的所有城市、景点以及其他的一些信息都有一个专属的5位数字编号,我们第一步要做的就是获取城市(直辖市+地级市)的编号,进行后续的进一步分析。 以上两个页面就是我们的城市编码来源。需要首先从目的地页面获得各省编码,之后进入各省城市列表获得编码。 过程中需要Selenium进行动态数据爬取,部分代码如下: def find_cat_url(url): headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0' } req=request. Request (url,headers=headers) html=urlopen(req) bsObj= BeautifulSoup (html.read(), "html.parser"...
- 下一篇
SpringBoot 整合 Dubbo&Zookeeper 实现分布式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36367789/article/details/81665692 1. 安装 Zookeeper 环境 Zookeeper 环境搭建&zk命令详解 2. 服务提供者 因为用了父工程的版本管理,所以这里没有显示版本,我把用到的版本给大家分享下。 jdk 1.8 springboot 1.5.8 spring-boot-starter-dubbo 1.0.0 闲余之际我会把demo源码分享。 2.1 pom依赖 <dependencies> <!-- Spring Boot Web 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Test 依...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6