美文网首页
Spring-boot过滤器Filter使用

Spring-boot过滤器Filter使用

作者: 阿垃垃圾君 | 来源:发表于2019-12-20 10:59 被阅读0次

    1. 定义自己的过滤器

    Spring-boot中的过滤器需要实现javax.servlet.Filter的接口,接口提供了三个重载方法,分别为init,doFilter,destroy,其中过滤的逻辑放在doFilter中,且必须实现这个方法。

    TestFilter.java

    package com.seasky.servicesitespring.filter;
    
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    public class TestFilter implements Filter {
        private static final Logger logger = LogManager.getLogger();//仅用于输出日志
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            logger.info("TestFilter init");
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //过滤逻辑,这里获取了发送请求的地址
            String remoteHost = servletRequest.getRemoteHost();
            logger.info("TestFilter filter: " + remoteHost);
            //这里继续下一个过滤器
            filterChain.doFilter(servletRequest, servletResponse);
        }
    
        @Override
        public void destroy() {
            logger.info("TestFilter destroy");
        }
    }
    
    

    2.注册过滤器容器配置

    根据spring-boot提供的注册组件进行过滤器注册,可新建一个注册文件FilterConfig.java用于注册自定义的过滤器

    FilterConfig.java

    package com.seasky.servicesitespring.config;
    
    import com.seasky.servicesitespring.filter.MyFilter;
    import com.seasky.servicesitespring.filter.TestFilter;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    //添加Configure注解用于spring-boot启动时扫描
    @Configuration
    public class FilterConfig {
        /**
         * 注册第三方过滤器
         * 功能与spring mvc中通过配置web.xml相同
         * 可以添加过滤器所拦截的 URL,拦截更加精准灵活
         * @return
         */
        @Bean
        public FilterRegistrationBean testFilterRegistration() {
            FilterRegistrationBean registration = new FilterRegistrationBean();
            registration.setFilter(new TestFilter());
            // 过滤应用程序中所有资源,当前应用程序根下的所有文件包括多级子目录下的所有文件,注意这里*前有“/”
            registration.addUrlPatterns("/*");
            //可自定义初始参数
            registration.addInitParameter("paramName", "paramValue");
            registration.setName("TestFilter");
            // 过滤器顺序,数字越小约先执行
            registration.setOrder(1);
            return registration;
        }
    }
    

    由于spring-boot启动时会自动扫描并注入Configure注解下的Bean,因此通过注册配置之后,过滤器就已经可以生效了。

    相关文章

      网友评论

          本文标题:Spring-boot过滤器Filter使用

          本文链接:https://www.haomeiwen.com/subject/ehbbnctx.html