SpringBoot过滤器的使用

发布时间:2024年01月22日

项目场景:

SpringBoot过滤器的使用,两种方式:1、注解的方式 2、spring配置的方式


示例代码:

代码说明:

?1、filterName表示filter的名称,urlPatters表示要拦截的URL资源,可以是多个。

?2、order(1)过滤器的运行等级,数字越小,越先执行。

? ? 3、init()方法只会执行一次,初始化过滤器。??

????4、doFilter()核心方法,配置过滤器的逻辑代码。?

? ??5、destroy()只会在项目停止或者是项目重新部署的时候才会执行。

1、注解的方式

在springboot 启动类添加该注解@ServletComponentScan,也可以写包的具体地址,传参数@ServletComponentScan("com.test.demo.filter")

@SpringBootApplication
@ServletComponentScan
public class ApplicationMain {

	public static void main(String[] args) {
		SpringApplication.run(ApplicationMain.class, args);
	}
}

? ? 定义一个TestFilter 实现Filter接口,重写里面的三个方法?。

@Order(1)
@WebFilter(filterName = "testFilter",urlPatterns = {"/*"})
public class TestFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化过滤器");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入资源之前操作");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("处理一下服务端返回操作");
    }

    @Override
    public void destroy() {
        System.out.println("过滤器被销毁了");
    }
}	

2、spring配置的方式

定义一个TestFilter 实现Filter接口,重写里面的三个方法?。

public class TestFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化过滤器");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入资源之前操作");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("处理一下服务端返回操作");
    }

    @Override
    public void destroy() {
        System.out.println("过滤器被销毁了");
    }
}	

定义一个spring配置文件,将自定义的Filter 注册到到FilterRegistrationBean里面。

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean registFilter(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new TestFilter());
        registrationBean.addUrlPatterns("/*");
        registrationBean.setName("testFilter");
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

测试:

? ? controller测试

@RestController
@RequestMapping("/test")
public class FilterController {
    @RequestMapping("/testFilter")
    public String testFilter(){
        System.out.println("filter执行成功");
        return "filter";
    }
}

完成之后启动项目,访问接口:localhost:8080/test/testFilter,观察控制台运行结果。?

文章来源:https://blog.csdn.net/u011974797/article/details/135750051
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。