springboot实现过滤器

81 阅读1分钟

写一个类实现过滤器接口

@Slf4j
public class MyFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
         log.info("----------------------过滤器执行-----------------------");
         // 放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

写一个配置类将通过方法将 过滤器注入容器(我是这样理解的)

package com.csy.springbootpro1.config;

import com.csy.springbootpro1.filter.MyFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.Filter;
import java.util.ArrayList;
import java.util.List;

/**
 *  @Configuration 表示配置类这个类的作用与applicationContext.xml作用一直 在springboot项目中可以有多个配置类
 *  多个作用 放便维护
 *  配置类中通过编写方法实现创建各种bean,方法必须是public的,不然不能被调用
 *  加上@Bean
 */

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean<MyFilter> registrationBean(){

        // 该对象是用来将自定义的过滤器注册到springboot过滤器链中的
        FilterRegistrationBean<MyFilter> filterFilterRegistrationBean = new FilterRegistrationBean<>();

        // 设置过滤器
        filterFilterRegistrationBean.setFilter(new MyFilter());

        // 设置过滤哪些请求
        List<String> list = new ArrayList<>();
        list.add("/*");
        filterFilterRegistrationBean.setUrlPatterns(list);

        //配置过滤器执行的顺序 (这里是最先执行)
        filterFilterRegistrationBean.setOrder(0);
        return filterFilterRegistrationBean;
    }
}

这里面比较重要的就是通过@Configuration 创建也给配置类了 @Bean

可以参考这里 blog.csdn.net/u010142437/…