mirror of
https://github.com/yangjian102621/geekai.git
synced 2025-09-20 18:26:37 +08:00
opt: 增加中间件自动对HTTP请求的参数去掉首尾空格
This commit is contained in:
parent
e63a30064b
commit
86bbea337d
@ -1,6 +1,7 @@
|
|||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"chatplus/core/types"
|
"chatplus/core/types"
|
||||||
"chatplus/service/fun"
|
"chatplus/service/fun"
|
||||||
"chatplus/store/model"
|
"chatplus/store/model"
|
||||||
@ -58,6 +59,7 @@ func (s *AppServer) Init(debug bool, client *redis.Client) {
|
|||||||
}
|
}
|
||||||
s.Engine.Use(corsMiddleware())
|
s.Engine.Use(corsMiddleware())
|
||||||
s.Engine.Use(authorizeMiddleware(s, client))
|
s.Engine.Use(authorizeMiddleware(s, client))
|
||||||
|
s.Engine.Use(parameterHandlerMiddleware())
|
||||||
s.Engine.Use(errorHandler)
|
s.Engine.Use(errorHandler)
|
||||||
// 添加静态资源访问
|
// 添加静态资源访问
|
||||||
s.Engine.Static("/static", s.Config.StaticDir)
|
s.Engine.Static("/static", s.Config.StaticDir)
|
||||||
@ -209,3 +211,65 @@ func authorizeMiddleware(s *AppServer, client *redis.Client) gin.HandlerFunc {
|
|||||||
c.Set(types.LoginUserID, claims["user_id"])
|
c.Set(types.LoginUserID, claims["user_id"])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 统一参数处理
|
||||||
|
func parameterHandlerMiddleware() gin.HandlerFunc {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
// GET 参数处理
|
||||||
|
params := c.Request.URL.Query()
|
||||||
|
for key, values := range params {
|
||||||
|
for i, value := range values {
|
||||||
|
params[key][i] = strings.TrimSpace(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 更新参数
|
||||||
|
c.Request.URL.RawQuery = params.Encode()
|
||||||
|
|
||||||
|
// POST JSON 参数处理
|
||||||
|
bodyBytes, err := io.ReadAll(c.Request.Body)
|
||||||
|
if err != nil {
|
||||||
|
c.Next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 还原请求体
|
||||||
|
c.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
|
||||||
|
// 将请求体解析为 JSON
|
||||||
|
var jsonData map[string]interface{}
|
||||||
|
if err := c.ShouldBindJSON(&jsonData); err != nil {
|
||||||
|
c.Next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对 JSON 数据中的字符串值去除两端空格
|
||||||
|
trimJSONStrings(jsonData)
|
||||||
|
// 更新请求体
|
||||||
|
c.Request.Body = io.NopCloser(bytes.NewBufferString(utils.JsonEncode(jsonData)))
|
||||||
|
|
||||||
|
c.Next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 递归对 JSON 数据中的字符串值去除两端空格
|
||||||
|
func trimJSONStrings(data interface{}) {
|
||||||
|
switch v := data.(type) {
|
||||||
|
case map[string]interface{}:
|
||||||
|
for key, value := range v {
|
||||||
|
switch valueType := value.(type) {
|
||||||
|
case string:
|
||||||
|
v[key] = strings.TrimSpace(valueType)
|
||||||
|
case map[string]interface{}, []interface{}:
|
||||||
|
trimJSONStrings(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case []interface{}:
|
||||||
|
for i, value := range v {
|
||||||
|
switch valueType := value.(type) {
|
||||||
|
case string:
|
||||||
|
v[i] = strings.TrimSpace(valueType)
|
||||||
|
case map[string]interface{}, []interface{}:
|
||||||
|
trimJSONStrings(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user