zoukankan      html  css  js  c++  java
  • Spring Boot filter

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

  • 相关阅读:
    Java 中String、StringBuffer、StringBuilder的差别
    [转载]StringBuffer versus String
    二维数组的连续子数组的最大和
    一位数组的最大和
    js中常见的去重方式
    魅族2016Java互联网方向其中一道笔试题--青蛙跳台阶问题
    美团在线编程2016--最大差值
    [转载]MySQL开发中常用的查询语句总结
    实现字符串全排列
    笔试题---最大子序列和
  • 原文地址:https://www.cnblogs.com/flydean/p/12680302.html
Copyright © 2011-2022 走看看