博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot 手写过滤器&加载第三方过滤器
阅读量:5889 次
发布时间:2019-06-19

本文共 2000 字,大约阅读时间需要 6 分钟。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36367789/article/details/81665638

如何手写一个过滤器呢。假设我现在需要一个计时过滤器,我想把每一次调用服务锁花费的时间打印到控制台,我该怎么做呢?

拦截机制有三种:

1. 能拿到http请求,但是拿不到处理请求方法的信息。
2. 既能拿到http请求信息,也能拿到处理请求方法的信息,但是拿不到方法的参数信息。
3. 能拿到方法的参数信息,但是拿不到http请求信息。

他们三个各有优缺点,需要根据自己的业务需求来选择最适合的拦截机制。

拦截机制图

好了下面开始正文。

本教程大概目录:

1. 手写过滤器
2. 加载第三方过滤器

好了,开始正文。

1. 手写过滤器

特别容易,继承Filter ,然后根据需求重写它的三个方法。

/** * TimeFilter  计时过滤器 * Created by Fant.J. */@Componentpublic 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. */@Configurationpublic 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注解,否则过滤器会失效。

介绍下我的所有文集:

流行框架

底层实现原理:

你可能感兴趣的文章
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
struts中的xwork源码下载地址
查看>>
ABP理论学习之仓储
查看>>
我的友情链接
查看>>
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>
加快ALTER TABLE 操作速度
查看>>
PHP 程序员的技术成长规划
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
js replace,正则截取字符串内容
查看>>
作业2
查看>>
nginx的信号量
查看>>
云im php,网易云IM
查看>>
DEFERRED_SEGMENT_CREATION
查看>>
Ada boost学习
查看>>
开源 java CMS - FreeCMS2.3字典管理
查看>>
block,inline和inline-block概念和区别
查看>>
移动端常见随屏幕滑动顶部固定导航栏背景色透明度变化简单jquery特效
查看>>
javascript继承方式详解
查看>>