# 《分布式IM系统》大后端平台-通用模型-第04节:通用拦截器规则链的设计和实现

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/15CDTGUDN (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本节难度:★★☆☆☆
  • 本节重点:基于责任链模式设计和实现大后端平台中通用的拦截器规则链,掌握责任链模式在实际工作场景中的应用,理解Web场景下通用拦截器规则链的设计、实现与应用,并能够将其灵活应用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/15CDTGUDN (opens new window)

大家好,我是冰河~~

不知道小伙伴们有没有这种感觉,学了很多技术和知识,但是到实际做项目时,还是不知道如何下手。比如我身边就有一些同事,也有不少读者,设计模式倒是学了不少,概念也背了,使用场景也知道,但就是不知道在实际项目中如何运用。

# 一、前言

设计模式是不少研发前辈们经过不断踩坑和总结出的设计和研发经验,使用设计模式不仅可以让我们编写出优雅的代码,写出的代码也会具备良好的扩展性。并且从写出的代码,也能看出一个人的编程水平,相信大部分小伙伴接手其他人写的烂代码时,心里都有一句:“卧槽”,哈哈哈。

# 二、本节诉求

基于责任链模式设计和实现大后端平台中通用的拦截器规则链,掌握通用的链式规则设计方法,掌握责任链模式在实际工作场景中的应用,并能够将其灵活应用到自身实际项目中。

注意:关于责任链模式,大家可以阅读《Java极简设计模式》专栏中的《第13章:责任链模式(COR)》 (opens new window) 一文,这里不再赘述。

# 三、规则链设计

在分布式IM即时通讯系统的大后端平台中,我们基于责任链模式实现了多重拦截校验规则,预留了大量扩展点。在设计和研发秒杀系统的过程中,也跟大家说过,一上来就设计和实现一个非常完善的系统是不可能的。

在设计和实现拦截校验规则时,我们要做到高度可扩展、可编排和可配置,随时可以扩展其他的校验规则,也能够随时对这些校验规则进行编排,同时,能够随时配置校验的具体规则。

大后端平台的拦截器规则链的执行流程如图4-1所示。


可以看到,客户端访问目标资源时,拦截器会拦截客户端发出的请求,在拦截器中,会提供统一的规则接口,规则接口下会有多个规则实现类,当请求到达拦截器时,会依次调用各个规则实现类组成的规则链,只有规则链中各个具体的规则校验都通过后,请求才会发往目标资源。只要有一个具体的规则校验不通过,则请求不再向后发送,直接返回具体的状态码。

# 四、类结构设计

拦截器规则链的核心类结构设计如图4-2所示。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码