本文目录
俄乌战争的挑衅者是谁
表面看是乌克兰,深看是北约东扩即蚕食其它地区即通过吸收接纳北约新成员方式并首先对哦构成安全威胁引发的。
Spring Boot项目中如何定制拦截器
SpringBoot中可以使用Intercept和Filter两种方式来实现拦截器。本文主要给大家讲解一下这两种方式的实现方式以及Filter和Intercept的区别。
Intercept实现方式
先定义一个拦截器类,需要继承HandlerInterceptor接口,点击这个接口可以看到有三个方法可以被实现,之所以说可以被实现,因为这三个方法被default修饰了,也就是非必须实现,接口里面已经有了这个接口的默认实现,这是java8的新特性。
所以当我们创建一个自定义的拦截器类的时候,是可以选择是否去实现其中的方法,比如大多数的情况下,我们只需要实现preHandler这个方法就可以满足我们的业务了,那么postHandle和afterCompletion方法就不需要实现了:
定义好拦截器类后,需要把这个拦截器加载到拦截器链中,所以我们需要WebConfig类,这个类需要实现WebMvcConfigurer接口类:
ok,一个拦截器就添加好了~
WebMvcConfigurer的作用就是为我们实现了通用的拦截器,我们如果想添加一些业务相关的拦截器,那么就实现这个接口类,然后像上面这样操作即可。
Filter实现方式
Filter实现还是之前的Servlet方式,先定义一个TestFilter类继承Filter接口:
然后再定义一个FilterConf类,把这个TestFilter注册到过滤器链中:
大家可以看到这里面有一个FilterRegistrationBean类,这个类就是SpringBoot为大家提供的过滤器,只要把你自定义的Filter添加到这里来就可以了,大家也可以自己去实现以下,然后点击上面这些方法看看FilterRegistrationBean为我们做了哪些事情。
如果有多个过滤器怎么办呢?
这个方法就是设置过滤器的优先级,可以根据业务需要定制自己的拦截器的执行顺序。
Filter和Intercept的区别
上面就是为大家带来的在SpringBoot中实现拦截器的两种方式,通常我们在做API项目的时候,可以在接口请求之前校验前端传递过来的token是否合法,也可以在这里设置是否允许跨域。跨域的知识大家有兴趣也可以学习一下,还是很有意思的。
这里再和大家一起学习下过滤器和拦截器的区别,面试中也经常会有这样的面试题:
Filter是基于函数回调,而Intercept是基于java的反射机制;
Filter是servlet的技术,而Intercept是注册在spring容器中,它不依赖servlet容器
Filter可以拦截几乎所有的请求(包含对静态资源的请求),而Intercept只拦截action请求(不拦截静态资源请求)
Filter不能访问action上下文及值栈里的对象,而Intercept都是可以的;
Intercept可以获取spring容器里的对象,而Filter是不行的;
Intercept在action的生命周期内是可以多次调用,而Filter只在容器初始化时被调用一次。
了解了以上的区别之后,相信大家在实际开发使用过程中便可以根据不同的业务场景具体是选择Filter还是Intercept就能心中有数了。
以上就是我为大家带来的如何在SpringBoot中定制拦截器的相关知识,如有问题大家可以随时私信我。
我是【java架构设计】,欢迎大家评论、点赞!关注我,持续为您提供科技领域优质内容!