Spring Boot-Filter过滤器使用

Spring Boot-Filter过滤器使用,第1张

1、基础准备

2、编写Filter

此处我们重点关注 doFilter方法 ,编写实现类重写该方法。

Ⅰ 在自定义Filter实现类上使用@WebFilter注解

Ⅱ 自定义filterName(随意,不要与其他Filter重复即可);

Ⅲ 定义urlPatterns此处设置为"/*",表示拦截所有请求;

Ⅰ 将传入的 request 与 response 对象转换为 Http类型 ;

Ⅱ 自定义不需要处理的URI数组

Ⅲ 获取请求URI

Ⅳ 判断本次请求

封装checkURI方法,如下:

a、注入PATH_MATCHER,用于路径比较,如下:

b、方法体,如下:

Ⅴ 不需要拦截,则直接放行

Ⅵ 其余路径,判断登录状态

a、已登录,则放行

BaseContext是自定义存储线程userId的类

b、未登录,拦截

自定义常量

拦截,此处使用response向前端返回响应数据R.error(NOT_LOGIN)

3、扫描Filter

在启动类上添加 @ServletComponentScan注解 ,用于扫描 @WebFilter 注解 ,如下:

4、测试

编写Controller类,启动测试。

以上即为Filter基础使用的内容,感谢阅读。

他们三个各有优缺点,需要根据自己的业务需求来选择最适合的拦截机制。

好了下面开始正文。

好了,开始正文。

特别容易,继承Filter ,然后根据需求重写它的三个方法。

其中 init方法是初始化方法,最先执行。

然后执行doFilter方法,熟悉servlet的应该都知道,它其实就是调用业务。

最后destroy方法,是最后执行的。

然后我们启动服务,随便调用一个controller,控制台打印如下:

一般在开发的时候,我们可能用到第三方的过滤器,我们不可能在其源码上添加 @Component 注解。所以我们必须写一个配置类来引入它。

下面我们把上面的例子当作第三方过滤器,把TimeFilter类上面的@Component注解去掉。做一个模拟练习。

注意一定要去掉TimeFilter类上面的@Component注解,否则过滤器会失效。

SpringCloud

springboot

nginx

redis

Java NIO教程

Java reflection 反射详解

Java并发学习笔录

Java Servlet教程

jdbc组件详解

Java NIO教程

Java语言/版本 研究

JAVA &&Spring &&SpringBoot2.x — 学习目录

SpringBoot 关于Filter、Servlet、Listener配置—官网

在使用嵌入式容器中(内置Tomcat),类上含有 @WebServlet 、 @WebFilter 和 @WebListener 注解时,可以通过启动类上的 @ServletComponentScan 注解进行扫描。

需要注意的是:@ServletComponentScan 在独立容器中没有任何效果,而是使用容器的内置发现机制。

任何的 Servlet 、 Filter 或者 Listener 实例都是在容器中注册的,可以使用 @Component 或者 @Bean

默认情况下,如果上下文只包含一个Servlet,则将其映射为 / ,在多个Servlet bean的情况下,bean名称用作路径前缀,过滤器映射到 /* 。

自定义Filter通过@Bean注解后,被SpringBoot自动注册到容器的Filter chain中,并且拦截路径为 /* ,这样导致的结果是:所有的URL都会被自定义的Filter过滤。

可以使用 ServletRegistrationBean 、 FilterRegistrationBean 以及 ServletListenerRegistrationBean 类进行完全的控制。

Spring Boot对Filter、Servlet提供了相应的注册类,来进行精细化的配置,我们可以使用注册类来取消Filter的自动注册。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11250219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存