1、go接入gin(完成)
2、go接入gorm(完成) 3、环境yaml配置(完成) 4、多库支持(完成) 5、接入日志(完成) 6、接入redis(完成) 7、自定义路由(完成) 8、接入jwt(完成)
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"lingye-gin/src/config"
|
||||
"lingye-gin/src/rest"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type GinRouter struct {
|
||||
}
|
||||
|
||||
func (v GinRouter) Init(r *gin.Engine) {
|
||||
config.Logger.Info("GinRouter Init")
|
||||
|
||||
// 一般路由映射关系
|
||||
groupMap := make(map[string]*gin.RouterGroup)
|
||||
// api路由映射关系
|
||||
apiUrls := make([]rest.RequestApi, 0)
|
||||
// api组名称
|
||||
apiGroupName := "api"
|
||||
|
||||
for _, normalRa := range rest.Urls {
|
||||
// 判断是否在某一组下
|
||||
if strings.Compare(normalRa.GroupName, "") == 0 {
|
||||
// 批量处理
|
||||
if handle(normalRa, r) {
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
// 分组名称
|
||||
groupName := fmt.Sprintf("/%s", normalRa.GroupName)
|
||||
|
||||
// api组, 基于jwt验证
|
||||
if strings.Compare(normalRa.GroupName, apiGroupName) == 0 {
|
||||
apiUrls = append(apiUrls, normalRa)
|
||||
continue
|
||||
}
|
||||
|
||||
// 分组不存在
|
||||
if groupMap[normalRa.GroupName] == nil {
|
||||
if normalRa.GroupHandleFunction == nil {
|
||||
// 不存在分组过滤器
|
||||
groupMap[normalRa.GroupName] = r.Group(groupName)
|
||||
} else {
|
||||
groupMap[normalRa.GroupName] = r.Group(groupName, normalRa.GroupHandleFunction)
|
||||
}
|
||||
}
|
||||
// 批量处理
|
||||
if handleGroup(normalRa, groupMap[normalRa.GroupName]) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, apiRa := range apiUrls {
|
||||
jwtR := r.Group(apiGroupName)
|
||||
jwtR.Use(config.JwtHandle)
|
||||
// 批量处理
|
||||
if handleGroup(apiRa, jwtR) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
config.Logger.Info("GinRouter Ok")
|
||||
}
|
||||
|
||||
func handle(request rest.RequestApi, engine *gin.Engine) bool {
|
||||
// get
|
||||
if strings.Compare(request.Mode, "get") == 0 {
|
||||
engine.GET(request.RelativePath, request.HandleFunction)
|
||||
return true
|
||||
}
|
||||
// post
|
||||
if strings.Compare(request.Mode, "post") == 0 {
|
||||
engine.POST(request.RelativePath, request.HandleFunction)
|
||||
return true
|
||||
}
|
||||
// delete
|
||||
if strings.Compare(request.Mode, "delete") == 0 {
|
||||
engine.DELETE(request.RelativePath, request.HandleFunction)
|
||||
return true
|
||||
}
|
||||
// put
|
||||
if strings.Compare(request.Mode, "put") == 0 {
|
||||
engine.PUT(request.RelativePath, request.HandleFunction)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func handleGroup(request rest.RequestApi, group *gin.RouterGroup) bool {
|
||||
// get
|
||||
if strings.Compare(request.Mode, "get") == 0 {
|
||||
group.GET(request.RelativePath, request.HandleFunction)
|
||||
return true
|
||||
}
|
||||
// post
|
||||
if strings.Compare(request.Mode, "post") == 0 {
|
||||
group.POST(request.RelativePath, request.HandleFunction)
|
||||
return true
|
||||
}
|
||||
// delete
|
||||
if strings.Compare(request.Mode, "delete") == 0 {
|
||||
group.DELETE(request.RelativePath, request.HandleFunction)
|
||||
return true
|
||||
}
|
||||
// put
|
||||
if strings.Compare(request.Mode, "put") == 0 {
|
||||
group.PUT(request.RelativePath, request.HandleFunction)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user