这是用户在 2025-6-26 11:33 为 https://www.yuque.com/snab/mallchat/sk1l1z8lu2gd2ioe 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?

拦截器

实现拦截器
UBLICBOOLEANPREHANDLE(HTTPSERVLETREQUESTREQUEST,HTTPSERV
PUBLICVOIDAFTERCOMPLETION(HTTPSERVLETREQUESTREQU
PUBLICVOIDPOSTHANDLE(HTTPSERVLETREQUEST
IMPLEMENTSHANDLERINTERCEPTOR
PUBLICCLASSBLACKINTERCEPTOR
RETURNFALSE
HTTPSERVLET
AOVERRIDE
AOVERRIDE
EQUESTREQUEST
HTTPSE
QUESTREQUESTH
AOVERRIDE
image.png

继承HandlerInterceptor重写前置和后置方法。
通过实现 WebMvcConfigurer 接口,并重写 addInterceptors() 方法来配置拦截器
PUBLICVOIDADDINTERCEPTORS(INTERCEPTORREGISTRYREGISTRY)
PRIVATECOLLECTORINTERCEPTORCOLLECTORLNTERCEPTOR
REGISTRYADDINTERCEPTOR(COLLECTORINTERCEPTOR)
PRIVATETOKENINTERCEPTORTOKENINTERCEPTOR
REGISTRY.ADDINTERCEPTORBLACKINTERCEPTOR)
PRIVATEBLACKINTERCEPTORBLACKLNTERCEPTOR;
REGISTRY.ADDINTERCEPTORTOKENINTERCEPTOR)
.ADDPATHPATTERNS"CAPI/*")
.ADDPATHPATTERNS"/CAPI/*");
.ADDPATHPATTERNS/CAPI*N);
AUTOWIRED
DAUTOWIRED
AAUTOWIRED
DOVERRIDE
PRIVATECO
image.png

TPE
WEBLOGASPECT
COLLECTORLNTERCEPTOR
BLACKLNTERCEPTOR
INTECEPTER
image.png

接下来看看抹茶的几个拦截器
黑名单拦截器BlackInterceptor
对拉黑的用户进行拦截,详细可看黑名单功能
链路追踪HttpTraceIdFilter
PUBICVOIDDOFILTER(SERVLETREQUESTREQUEST,SERVLETRESPONSERESPONSE,FILTER
STRINGTID=UUID.RANDOMUUID).TOSTRING()
CHAIN.DOFILTERREGUEST,RESPONSE);
MDC.REMOVE(MDCKEY.TID)
MDCPUT(MDCKEYTID,TID;
DOVERRIDE
image.png

准确来说它是个filter,但是效果实际上是一样的。目的是生成链路追踪的id,相同线程内打印的日志就会带上相同的标识详情查看整合logback日志
鉴权拦截器TokenInterceptor
针对所有接口,都会走这个拦截器,只要请求头附带token,就会进行鉴权。
当然,如果接口是/public的,我们是允许鉴权失败的。
对于/public接口也进行用户的解析有一个好处,有些接口虽然是非登录态的,但是针对登录态,可以做一些个性化适配。比如商品列表接口,非登录态看见的是一样的商品,登录态可以看到个性化推荐。
如果是一个需要登录态的接口,但是用户鉴权失败,我们会返回对应的401http错误码。
通过HttpErrorEnum将错误码设置进response,进行返回。
请求上下文RequestHolder
对于登录的用户,我们会将uid设置为请求属性,在CollectorInterceptor中统一收集。
CollectorInterceptor将请求的特征,ip,uid都收集进RequestHolder中,并且在controller代码执行完毕后,将信息移除。
RequestHolder其实内部就是一个threadLocal,这样在业务逻辑中,我们可以很轻松的拿到uid的值。
image.png

AOP请求日志WebLogAspect
打印接口的请求,以及耗时,便于排查问题,详情看aop实现接口日志
2023-08-21 19:27
6332
0
IP 属地广东
举报
石探讨探讨
Ctrl + ⇧ + 8无序列表

677字
Adblocker
划词评论(0)