• 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

  • 相关阅读:
    win10 点击开始按钮无反应
    Server Error in '/' Application. IIS拒绝访问
    vs2017添加引用时报错未能正确加载“ReferenceManagerPackage”包。
    关于JavaScript中的this指向问题
    4p-在一张图片中根据矩形四个点的坐标计算两个矩形是否相交
    opencv使用
    [VMware]虚拟网络编辑器
    [所思所想]观《长津湖》有感
    [项目管理]失败的软件项目所具备的特点【待续】
    [软件过程/软件生命周期模型]软件过程的工具链【待续】
  • 原文地址:https://www.cnblogs.com/myf008/p/10783906.html
Copyright © 2020-2023  润新知