Spring Boot filter

BitLuminaryX
• 阅读 1179

在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的博客

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
(原)ffmpeg过滤器开发和理解
最近学习了ffmpeg关于filter过滤器的开发,关于中间的几个相关概念,我们先放在简单介绍一下:AVFilterGraph:几乎完全等同与directShow中的fitlerGraph,代表一串连接起来的filter们.AVFilter:代表一个filter.AVFilterPad:代表一个filter的输入或输出口,等同于DShow中的Pi
Stella981 Stella981
3年前
SpringBoot 整合Filter
SpringBoot整合Filter一、创建基础SpringBoot项目,集成Web即可<dependency\<groupId\org.springframework.boot</groupId\<a
Stella981 Stella981
3年前
Spring Boot使用笔记
1\. boot将自动把bean类型为Servlet,Filter,listener等servlet规范中的类型,向boot内嵌的web容器注册,需要控制filter、servlet的初始化和参数等,可以使用FilterRegistrationBean和ServletRegistrationBean,来自文档https://docs.spring.i
Stella981 Stella981
3年前
SpringBoot学习之路:09.Spring Boot中添加Filter应用
   上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现一.编写MyFilter实现Filter接口packagecom.maxbill.core.webbox.filter;importorg.apache.log4j
Stella981 Stella981
3年前
Spring Boot Servlet支持介绍
Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到Servlet、Filter、Listener、Interceptor 等等。当使用SpringBoot时,嵌入式Servlet容器通过扫描注解的方式注册Servlet、Filter和Servlet规范的所有监听器(如HttpSessionListener监听器)。 
Stella981 Stella981
3年前
Eclipse搭建springboot项目(八)拦截器、过滤器、监听器
知识点:1、SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter(核心知识)  filter简单理解:人检票员(filter)景点  1)SpringBoot启动默认加载的Filter    characterEncodingFilter    
Wesley13 Wesley13
3年前
Java Web 学习笔记
过滤器Filter功能:1、用来拦截传入的请求和传出的相应。2、修改或以某种方式处理正在客户端和服务端之间交换的数据流。如何使用?与使用Servlet类似,Filter是JavaWeb提供的一个借口,开发者只需要自定义一个类并且实现该接口即可packagecom.janeroad.filter;
Easter79 Easter79
3年前
SpringBoot学习之路:09.Spring Boot中添加Filter应用
   上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现一.编写MyFilter实现Filter接口packagecom.maxbill.core.webbox.filter;importorg.apache.log4j
Stella981 Stella981
3年前
Spring Boot filter
在SpringBoot中自定义filter本文我们将会讲解如何在SpringBoot中自定义filter并指定执行顺序。定义Filter很简单,我们只需要实现Filter接口即可,同时我们可指定@Order来确定其执行顺序,我们定义两个filter如下:@Slf4j@Component@Order(1)p
Stella981 Stella981
3年前
OncePerRequestFilter的作用
在spring中,filter都默认继承OncePerRequestFilter,但为什么要这样呢?OncePerRequestFilter顾名思义,他能够确保在一次请求只通过一次filter,而不需要重复执行。publicfinalvoiddoFilter(ServletRequestrequest,ServletResponse
Stella981 Stella981
3年前
Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
 之前我们控制多个filter的执行顺序是通过web.xml中控制filter的位置来控制的,放在上面的会比放在下面的先执行,如下“用户登录检查过滤器”会比“接口日志过滤器”先执行!复制代码(https://oscimg.oschina.net/oscnet/b6cddad28c507c7e7de7eac1f9c0b27fbfe.gif)