zoukankan      html  css  js  c++  java
  • Springboot添加filter方法

    在springboot添加filter有两种方式:

      (1)、通过创建FilterRegistrationBean的方式(建议使用此种方式,统一管理,且通过注解的方式若不是本地调试,如果在filter中需要增加cookie可能会存在写不进前端情况)

      (2)、通过注解@WebFilter的方式

    一、通过创建FilterRegistrationBean的方式创建多个filter以及设置执行顺序:

       1、创建两个实现Filter接口的类TestFilter1 、TestFilter2

    package com.aoxun.core.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class TestFilter1 implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {}
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {}
    
    }
    package com.aoxun.core.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class TestFilter2 implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {}
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {}
    
    }

    2、创建配置类

          有多个filter就创建多个FilterRegistrationBean ,若需注明filter的执行顺序,可通过registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1)配置,值越大,执行顺序越靠后

    package com.aoxun.config.web;
    
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.aoxun.core.filter.TestFilter1;
    import com.aoxun.core.filter.TestFilter2;
    
    /**
     * filter配置
     * @author zcj
     *
     */
    @Configuration
    public class FilterConfig2 {
    
        @Bean
        public FilterRegistrationBean companyUrlFilterRegister() {
            FilterRegistrationBean registration = new FilterRegistrationBean();
            //注入过滤器
            registration.setFilter(new TestFilter1());
            //拦截规则
            registration.addUrlPatterns("/*");
            //过滤器名称
            registration.setName("testFilter1");
            //过滤器顺序
            registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
            return registration;
        }
        
        @Bean
        public FilterRegistrationBean outLinkSecurityFilterRegister() {
            FilterRegistrationBean registration = new FilterRegistrationBean();
            //注入过滤器
            registration.setFilter(new TestFilter2());
            //拦截规则
            registration.addUrlPatterns("/*");
            //过滤器名称
            registration.setName("testFilter2");
            //过滤器顺序
            registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1);
            return registration;
        }
        
    }

    二、通过注解@WebFilter的方式

       1、在启动类上增加@ServletComponentScan注解,自动扫描带有过滤器注解的包

       2、在类上使用@WebFilter和@Order组合实现

    package com.aoxun.core.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.core.annotation.Order;
    
    @WebFilter(filterName="testFilter1",urlPatterns= {"/*"})
    @Order(FilterRegistrationBean.LOWEST_PRECEDENCE)
    public class TestFilter1 implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
    
            chain.doFilter(request, response);
    
        }
    
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
    
        }
    
    }

    (转自:https://www.cnblogs.com/begin2016/p/8947887.html

  • 相关阅读:
    IBM Personal Communications 软件:精简绿色版TN3270终端模拟器:经测试可以在 (winxp、win2003、win764)上运行
    virtualbox谨记:续....
    Eclipse连接MySQL数据库
    shell几种字符串加密解密的方法
    表达式语言引擎:Apache Commons JEXL 2.1 发布
    一种表达式语言的解析引擎JEXL简单使用
    Java 实现String语句的执行(Jexl)
    JUnit4
    EL表达式
    Looping through the content of a file in Bash
  • 原文地址:https://www.cnblogs.com/myf008/p/10783906.html
Copyright © 2011-2022 走看看