kratos项目使用中间件Middleware介绍

demo项目地址

https://gitee.com/huoyingwhw/kratos-middleware

业务场景

很多情况下我们需要对请求的URI进行token校验——用户登录成功后将token与uid的对应关系存储到redis中,然后在某个时机去刷新token数据,接下来的所有请求都需要校验一下当前请求的token是否合法,如果合法的话将uid取出来传递给每一个service中进行业务处理——这样就不用再去查数据库了。

我们省略token管理的逻辑(具体token什么时候过期、如何刷新token这些逻辑),在redis中先存好token与uid对应的数据。

还有一些时候,我们需要在所有的http请求的响应做一些统一的操作,比如将当前时间戳保存到某个响应头中,这样方便客户端做时间核对。

以上的场景合适在中间件中去处理,因为这些需求在后端来说都是“全局”的。

另外,案例中只给出了http的例子,其实grpc的用法也是一样的~

kratos中集成的中间件参考官方文档

https://go-kratos.dev/docs/component/middleware/overview/

注意下,“先进后出”的生效顺序:

 

项目中使用

1、在server/http.go中加上一些ServerOption

2、自定义的middleware封装到自己写的包中:

3、校验成功的话将uid放到请求的ctx中:

4、在业务代码中从ctx中获取uid:

~~~

效果演示

先看下redis中的数据:

login接口在白名单,不用校验:

redis中存在token的话正确返回,并且业务中能从ctx中拿到uid:

 

 token不存在的情况:

而且每次返回的响应头都有自定义的当前时间戳的数据:

~~~

posted on 2023-02-09 15:01  江湖乄夜雨  阅读(441)  评论(0编辑  收藏  举报