API网关 | Kong | APISIX | Trk | Apigee | Aliyun |
---|---|---|---|---|---|
部署模式 | 单机和集群 | 单机和集群 | 单机和集群 | 不支持单机 | RaaS |
数据存储 | Postgres或者Cassandra | etcd | Redis | Postgres、Cassandra和Zookeeper | RaaS |
是否开源 | Apache 2.0协议 | Apache 2.0协议 | MPL协议 | 否 | 否 |
核心技术 | Nginx+Lua | Nginx+Lua | Golang | 未知 | 未知 |
私有部署 | 是 | 是 | 是 | 否 | 否 |
自定义插件 | 是 | 是 | 是 | 否 | 否 |
社区活跃度 | 高 | 高 | 高 | 中 | 低 |
支持yaml | 是 | 是 | 否 | 否 | 否 |
package initialize
import (
"github.com/gin-gonic/gin"
"web_api/goods_web/middlewares"
"web_api/goods_web/router"
)
func Routers() *gin.Engine {
Router := gin.Default()
//配置跨域
Router.Use(middlewares.Cors())
//ApiGroup := Router.Group("/g/v1")
ApiGroup := Router.Group("/v1")
router.InitGoodsRouter(ApiGroup)
router.InitCategoryRouter(ApiGroup)
router.InitBannerRouter(ApiGroup)
router.InitBrandRouter(ApiGroup)
return Router
}
flag = 5 // 这里为了测试kong的负载均衡
添加1个consumer
为这个consumer添加JWT
配置全局的PLUGIN:设置header为x-token
生成token:https://jwt.io/,添加key和secret
Bearer
(这个是kong的要求)
Bearer
,所以在jwt中我们就需要分割去掉Bearer
func JWTAuth() gin.HandlerFunc {
return func(c *gin.Context) {
// 我们这里jwt鉴权取头部信息 x-token 登录时回返回token信息 这里前端需要把token存储到cookie或者本地localSstorage中 不过需要跟后端协商过期时间 可以约定刷新令牌或者重新登录
token := c.Request.Header.Get("x-token")
if token == "" {
c.JSON(http.StatusUnauthorized, map[string]string{
"msg": "请登录",
})
c.Abort()
return
}
token = strings.Split(token, " ")[1]
j := NewJWT()
// parseToken 解析token包含的信息
claims, err := j.ParseToken(token)
//省略