目录
[一,使用@Webfilter+@ServletComponentScan 注解](#一,使用@Webfilter+@ServletComponentScan 注解)
[1 创建过滤器类实现Filter接口](#1 创建过滤器类实现Filter接口)
[2 在启动类中添加 @ServletComponentScan 注解](#2 在启动类中添加 @ServletComponentScan 注解)
[1 创建过滤器类(不添加WebFilter注解)](#1 创建过滤器类(不添加WebFilter注解))
[2创建配置类, 注册过滤器类](#2创建配置类, 注册过滤器类)
拦截器Interceptor
可以参考 springmvc-拦截器-CSDN博客
过滤器Filter
关于过滤器的前置知识可以参考:
javaWeb之过滤器(Filter)_javaweb中filter过滤器对象什么时候创建?-CSDN博客
过滤器在springboot项目的应用
一,使用@Webfilter+@ServletComponentScan 注解
1 创建过滤器类实现Filter接口
- 指定过滤器顺序(补充)。若存在多个过滤器且执行顺序重要,可使用@Order注解指定顺序。数字越小优先级越高。如@Order(1) 。
java
package com.it.heima.springboot06filter.filter;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/user/*")
public class UserFilter 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("是否满足条件");
System.out.println("如满足条件放行~~~~~~~~");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("正在销毁~~~~~~");
}
}
2 在启动类中添加 @ServletComponentScan 注解
- 扫描WebFilter注解,让该注解生效
java
package com.it.heima.springboot06filter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan("com.it.heima.springboot06filter.filter")
public class Springboot06FilterApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot06FilterApplication.class, args);
}
}
测试结果

java
package com.it.heima.springboot06filter.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("user")
public class UserController {
@RequestMapping("test")
public String test(){
System.out.println("正在执行test方法");
return "test";
}
}

二,创建过滤器配置类,注册过滤器
1 创建过滤器类(不添加WebFilter注解)
java
package com.it.heima.springboot06filter.filter;
import jakarta.servlet.*;
import java.io.IOException;
public class UserFilter 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("是否满足条件");
System.out.println("如满足条件放行~~~~~~~~");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("正在销毁~~~~~~");
}
}
2创建配置类, 注册过滤器类
java
package com.it.heima.springboot06filter.config;
import com.it.heima.springboot06filter.filter.UserFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class FilterConfig implements WebMvcConfigurer {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
// 创建过滤器注册对象
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
// 把过滤器注入到过滤器注册对象中
filterRegistrationBean.setFilter(new UserFilter());
// 设置过滤器拦截的请求
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
测试结果

