Spring Boot filter

在Spring Boot中自定义filter

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

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

1@Slf4j 2@Component 3@Order(1) 4public class TransactionFilter implements Filter { 5 6 @Override 7 public void doFilter( 8 ServletRequest request, 9 ServletResponse response, 10 FilterChain chain) throws IOException, ServletException 11 12 { 13 14 HttpServletRequest req = (HttpServletRequest) request; 15 log.info( 16 "Starting a transaction for req : {}", 17 req.getRequestURI()); 18 19 chain.doFilter(request, response); 20 log.info( 21 "Committing a transaction for req : {}", 22 req.getRequestURI()); 23 } 24 25 // other methods 26} 27 28@Slf4j 29@Component 30@Order(2) 31public class RequestResponseLoggingFilter implements Filter { 32 33 @Override 34 public void doFilter( 35 ServletRequest request, 36 ServletResponse response, 37 FilterChain chain) throws IOException, ServletException { 38 39 HttpServletRequest req = (HttpServletRequest) request; 40 HttpServletResponse res = (HttpServletResponse) response; 41 log.info( 42 "Logging Request {} : {}", req.getMethod(), 43 req.getRequestURI()); 44 chain.doFilter(request, response); 45 log.info( 46 "Logging Response :{}", 47 res.getContentType()); 48 } 49 50 // other methods 51}

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

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

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

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

1@Bean 2 public FilterRegistrationBean<UrlFilter> loggingFilter(){ 3 FilterRegistrationBean<UrlFilter> registrationBean 4 = new FilterRegistrationBean<>(); 5 6 registrationBean.setFilter(new UrlFilter()); 7 registrationBean.addUrlPatterns("/users/*"); 8 9 return registrationBean; 10 }

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

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

更多教程请参考 flydean的博客

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

SpringBoot学习之路:09.Spring Boot中添加Filter应用

   上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现一.编写MyFilter实现Filter接口packagecom.maxbill.core.webbox.filter;importorg.apache.log4j

SQLAlchemy和Flask

假设page\_index1,page\_size10;所有分页查询不可以再跟first(),all()等1.用offset()设置索引偏移量,limit()限制取出filter语句后面可以跟order_by语句db.session.query(User.name).filter(User.email.li