欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > SpringBoot中使用Filter(过滤器)

SpringBoot中使用Filter(过滤器)

2025/5/11 15:06:13 来源:https://blog.csdn.net/m0_54850303/article/details/145780597  浏览:    关键词:SpringBoot中使用Filter(过滤器)

目录

1. 入门

1.1 编写实体类

1.2 编写过滤器

1.3 编写Controller

1.4 在启动类上开启servlet组件扫描(@ServletComponentScan)

1.5 测试并观察控制台打印情况

2. 进阶

2.1 过滤器简单介绍

2.2 编写过滤器类

2.3?编写过滤器配置类

2.4?Controller和实体类和之前一样,启动类的servlet组件扫描可去除

2.5?启动程序并观察控制台


1. 入门
1.1 编写实体类
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Message {private Date date;private String msg ;private String title;
}
1.2 编写过滤器
@WebFilter(urlPatterns = "/message/*",filterName = "filter1")
public class MessageFilter1 extends HttpFilter {@Overrideprotected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {if("/message/echo".equals(request.getRequestURI())) {String title = request.getParameter("title");System.out.println("【filter1】拦截到的请求的title参数内容为:"+title);}
//        将请求传递给链中的下一个过滤器或目标Servletchain.doFilter(request,response);}
}
1.3 编写Controller
@RestController
@RequestMapping("/message")
public class MessageController {@Resourceprivate Message message ;@RequestMapping("/echo")public Message echo(String msg,String title) {message.setTitle(title);message.setMsg(msg);return message;}}
1.4 在启动类上开启servlet组件扫描(@ServletComponentScan)
@SpringBootApplication
@ServletComponentScan   //开启servlet组件扫描
public class MicrobootWebApplication {public static void main(String[] args) {SpringApplication.run(MicrobootWebApplication.class, args);}}
1.5 测试并观察控制台打印情况
http://localhost:8083/message/echo?msg=西红柿战争&title=两败俱伤

拦截成功

2. 进阶
2.1 过滤器简单介绍

过滤器(Filter)是Java Web应用中一种用于处理请求(request)和响应(response)的组件

过滤器和拦截器的执行顺序:

  • 过滤器(预处理)
  • 过滤器(后处理)
  • 拦截器(前处理)
  • 控制器方法(Controller)
  • 拦截器(后处理)
  • 过滤器(后处理)
2.2 编写过滤器类
//过滤器1,因为有了配置类,不再需要添加@WebFilter注解
public class MessageFilter1 extends HttpFilter {@Overrideprotected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {if("/message/echo".equals(request.getRequestURI())) {String title = request.getParameter("title");System.out.println("【filter1】拦截到的请求的title参数内容为:"+title);}chain.doFilter(request,response);}
}public class MessageFilter2 extends HttpFilter {@Overrideprotected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {if("/message/echo".equals(request.getRequestURI())) {String msg = request.getParameter("msg");System.out.println("【filter2】拦截到的请求的title参数内容为:"+msg);}chain.doFilter(request,response);}
}
2.3编写过滤器配置类
//过滤器配置类
@Configuration
public class WebFilterConfig {@Beanpublic FilterRegistrationBean getFilter1Registration() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(this.getMessageFilter1());//设置过滤器名称和路径,在过滤器类写了的话,这里不用重复写filterRegistrationBean.setName("filter");filterRegistrationBean.addUrlPatterns("/*");//设置过滤器执行顺序,数字越小,越早进行过滤,也可设置为负数filterRegistrationBean.setOrder(1);return filterRegistrationBean;}@Beanpublic FilterRegistrationBean getFilter2Registration() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(this.getMessageFilter2());//设置过滤器执行顺序filterRegistrationBean.setOrder(2);return filterRegistrationBean;}@Beanpublic MessageFilter1 getMessageFilter1() {return new MessageFilter1();}@Beanpublic MessageFilter2 getMessageFilter2() {return new MessageFilter2();}
}
2.4Controller和实体类和之前一样,启动类的servlet组件扫描可去除
//@ServletComponentScan   //开启servlet组件扫描
public class MicrobootWebApplication {public static void main(String[] args) {SpringApplication.run(MicrobootWebApplication.class, args);}}
2.5启动程序并观察控制台
http://localhost:8083/message/echo?msg=西红柿战争&title=两败俱伤

filter1比filter2先启用,执行成功。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词