过滤器 (Filter) 是 Servlet 中常用的技术, 可以实现用户在访问某个目标资源之前, 对访问的请求和响应进行拦截, 常用的场景有登录校验, 权限控制, 敏感词过滤等, 下面介绍下 Spring Boot 配置过滤器的两种方式.
本文目录
一,@webFilter 注解方式二,@Bean 注解方式三, 查看运行效果
一,@WebFilter 注解方式
使用 @WebFilter 注解为声明当前类为 filter, 第一个参数为该 filter 起一个名字, 第二个参数为说明要拦截的请求地址, 当前类需要实现 Filter 接口, 里面有三个方法, 分别为过滤器初始化, 过滤方法和过滤器销毁.
- @Slf4j
- @WebFilter(filterName = "myFilter1", urlPatterns = "/*")
- public class MyFilter1 implements Filter {
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- log.info(filterConfig.getFilterName() + "init");
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
- log.info("myFilter1 begin");
- try {
- log.info("业务方法执行");
- chain.doFilter(request, response);
- } catch (Exception e) {
- log.error("error!", e);
- }
- log.info("myFilter1 end");
- }
- @Override
- public void destroy() {
- }
- }
启动类添加 @ServletComponentScan 注解,@ServletComponentScan 注解所扫描的包路径必须包含该 Filter, 代码如下:
- @SpringBootApplication
- @ServletComponentScan(basePackages = "com.example.demo.filter")
- public class DemoApplication {
- public static void main(String[] args) {
- SpringApplication.run(DemoApplication.class, args);
- }
- }
二,@Bean 注解方式
新建 MyFilter2.java 类, 不要加注解 @WebFilter, 代码如下:
- @Slf4j
- public class MyFilter2 implements Filter {
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- log.info(filterConfig.getFilterName() + "init");
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
- log.info("myFilter2 begin");
- try {
- log.info("业务方法执行");
- chain.doFilter(request, response);
- } catch (Exception e) {
- log.error("error!", e);
- }
- log.info("myFilter2 end");
- }
- @Override
- public void destroy() {
- }
- }
新建配置类 WebConfig.java, 配置 bean, 代码如下:
- @Configuration
- public class WebConfig {
- @Bean
- public FilterRegistrationBean testFilterRegistration() {
- FilterRegistrationBean registration = new FilterRegistrationBean(new MyFilter2());
- registration.addUrlPatterns("/test"); //
- registration.setName("myFilter2");
- return registration;
- }
- }
三, 查看运行效果
项目启动后浏览器访问 http://localhost:8080/test, 可以看到过滤器已生效, 后台打印日志如下:
[nio-8080-exec-1] com.example.demo.filter.MyFilter1 : myFilter1 begin
[nio-8080-exec-1] com.example.demo.filter.MyFilter1 : 业务方法执行
[nio-8080-exec-1] com.example.demo.filter.MyFilter1 : myFilter1 end
到此 Spring Boot 配置过滤器的两种方式已经全部实现, 有问题欢迎留言沟通哦!
完整源码地址: https://github.com/suisui2019/springboot-study
来源: https://www.cnblogs.com/haha12/p/11472582.html