SpringBoot使用Filter

本文详细介绍了SpringBoot中Filter的使用,包括案例结构、主要注解、Filter的方法、FilterChain、FilterConfig以及OncePerRequestFilter的执行顺序。重点讨论了@Order注解对拦截器执行顺序的影响,以及FilterRegistrationBean和@WebFilter的区别。
摘要由CSDN通过智能技术生成

Filter 是 JavaEE 中 Servlet 规范的一个组件,位于包javax.servlet 中,它可以在 HTTP 请求到达 Servlet 之前,被一个或多个Filter处理。

1.案例结构

1.1first拦截器

@WebFilter(filterName = "first" , urlPatterns = "/*")
@Order(1)
public class FirstFilter implements Filter {


  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    Filter.super.init(filterConfig);
    System.out.println("first拦截器初始化");
  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) servletRequest;
    System.out.println("first拦截器获取Attribute"+req.getAttribute("name"));//无

    req.setAttribute("name","第一次设置的name");//作用范围为:一次请求域,即下次Filter也能取的到

    HttpServletResponse res = (HttpServletResponse) servletResponse;
    res.setHeader("firstHeader","firstHeader");//设置请求头,会一直层层传递到控制层的响应头

    filterChain.doFilter(req,res);//按Order优先顺序调用下一个Filter,直到Controller层

    System.out.println("firstFilterEnd");//doFilter内部执行完毕之后,才回来执行这个,类似二叉树的前序遍历

  }

  @Override
  public void destroy() {
    Filter.super.destroy();
    System.out.println("first拦截器销毁");
  }
}

1.2second拦截器

@WebFilter(urlPatterns = "/*")
@Order(2)
public class SecondFilte
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中使用Filter,可以通过两种方式进行配置: 1. 注解方式 可以使用@WebFilter注解声明Filter,然后通过@ServletComponentScan注解启用自动扫描。 示例代码如下: ``` import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(filterName = "myFilter", urlPatterns = "/*") public class MyFilter 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. 配置类方式 可以创建一个配置类,实现WebMvcConfigurer接口,在其中重写addInterceptors方法,并添加FilterRegistrationBean注册Filter。 示例代码如下: ``` import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.Filter; @Configuration public class MyFilterConfig { @Bean public FilterRegistrationBean<Filter> myFilter() { FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>(); registration.setFilter(new MyFilter()); registration.addUrlPatterns("/*"); registration.setName("MyFilter"); registration.setOrder(1); return registration; } } ``` 其中,addUrlPatterns方法设置Filter的拦截路径,setName方法设置Filter的名称,setOrder方法设置Filter的执行顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值