在Spring Boot中自定义filter

本文我们将会讲解如何在Spring Boot中自定义filter并指定执行顺序。

定义Filter很简单,我们只需要实现Filter接口即可,同时我们可指定@Order来确定其执行顺序,我们定义两个filter如下:

@Slf4j
@Component
@Order(1)
public class TransactionFilter implements Filter { @Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request;
log.info(
"Starting a transaction for req : {}",
req.getRequestURI()); chain.doFilter(request, response);
log.info(
"Committing a transaction for req : {}",
req.getRequestURI());
} // other methods
}
@Slf4j
@Component
@Order(2)
public class RequestResponseLoggingFilter implements Filter { @Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
log.info(
"Logging Request {} : {}", req.getMethod(),
req.getRequestURI());
chain.doFilter(request, response);
log.info(
"Logging Response :{}",
res.getContentType());
} // other methods
}

注意在Spring Boot中我们需要使用@Component来实例化Filter从而在Spring Boot中生效。

@Order指定了两个fiter的顺序。

上面的例子我们指定了两个fiter对于所有的url生效,如果我们希望filter对于特定的某些url生效该怎么办呢?

我们可使用FilterRegistrationBean来手动注册对于的Filter:

    @Bean
public FilterRegistrationBean<UrlFilter> loggingFilter(){
FilterRegistrationBean<UrlFilter> registrationBean
= new FilterRegistrationBean<>(); registrationBean.setFilter(new UrlFilter());
registrationBean.addUrlPatterns("/users/*"); return registrationBean;
}

上面我们同时指定了filter对应的urlPatttern。

本文的例子可以参考 https://github.com/ddean2009/learn-springboot2/tree/master/springboot-filter

更多教程请参考 flydean的博客

最新文章

  1. Netty:数据处理流程
  2. .Net组件程序设计之序列化
  3. Codeforces Round #172 (Div. 2)
  4. zju(11)在IAR中移植ucos到msp430
  5. 破解win10系统密码
  6. uname -r和uname -a了解
  7. LINQ 简单用法【1】
  8. Echart 商业级数据图表
  9. px和em的区别
  10. 【jQuery】总结:筛选器、控制隐藏、操作元素style属性
  11. Eclipse hangs on loading workbench, eclipse停在启动界面的处理办法
  12. 【转】cocos2d-x获取系统时间&mdash;&mdash;2013-08-25 10
  13. 【BZOJ3456】【CDQ分治+FNT】城市规划
  14. Windows 7 mklink命令详解
  15. zepto源码研究 - ajax.js($.ajaxJSONP 的分析)
  16. js框架页跳转
  17. 整理的一些数据库不容易想到的SQL语句实例一
  18. 单身福利来了:VR恋人为你量身定制一个女朋友
  19. js算法集合(一) 水仙花数 及拓展(自幂数的判断)
  20. PHP 5 Array 函数

热门文章

  1. CCF题库刷题编译错误
  2. Keil5新建STM32工程(库函数版本)
  3. python:&lt;class &#39;numpy.ndarray&#39;&gt;的学习
  4. 判断移动端还是PC端JS
  5. Java8 学习笔记--函数式接口
  6. JDBCUtils,根据当前MySQL数据库下面的表生成java实体类
  7. 【公告】请访问我Blog新站——superman2014 www.superman2014.com
  8. Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&amp;弃用的代码删除
  9. Hadoop(八):YARN框架简介
  10. PowerShell入门简介