责任链是一种行为模式。将处理请求的多个环节连在一起,形成一条链。
当请求的对象进入链条时,流过某个模块,某个模块就处理自身的逻辑,处理完成之后,将处理后的对象在交由下一个环节处理。以此来实现各个业务模块之间的解耦。拦截器链和过滤器链和tomcat的管道模式都是责任链的实现方式。
手动写一个责任链
|
|
使用apache提供的责任链ChainBase
自己手写一个责任链虽然简单,但是需要在各个环节里指明下个环节。如果使用使用apache提供的责任链ChainBase,则可以省掉这部分代码
|
|
过滤器 (filter)
过滤器依赖于servlet容器。在实现上,基于函数回调。它可以对几乎所有请求进行过滤(不能过滤转发请求)。
应用场景:过滤请求的特殊字符,防止SQL注入。
|
|
多个 Filter 执行顺序为:
根据优先级顺序由高到低执行 doFilter 方法
拦截器 (Interceptor)
拦截器是基于web框架的,在Spring中是依赖于SpringMVC框架。基于Java的反射机制,属于面向切面编程(AOP)的一种运用。
由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入进行一些业务操作,只能对 Controller请求进行拦截。
应用场景:登录检查,请求执行时间等。
|
|
多个 Interceptor 执行顺序为:
preHandle :低优先级 -> 高优先级
postHandle:高优先级 -> 低优先级
afterCompletion:高优先级 -> 低优先级
【文献】
https://blog.csdn.net/csdn13257081409/article/details/105652032
https://www.lnrcoder.cn/java/filter-interceptor.html