fix
This commit is contained in:
@@ -134,9 +134,18 @@ func (r *GinRouter) GetEngine() *gin.Engine {
|
||||
|
||||
// applyMiddlewares 应用中间件
|
||||
func (r *GinRouter) applyMiddlewares() {
|
||||
// 按优先级排序中间件
|
||||
// 按优先级排序中间件,优先级相同时按名称排序确保稳定性
|
||||
sort.Slice(r.middlewares, func(i, j int) bool {
|
||||
return r.middlewares[i].GetPriority() > r.middlewares[j].GetPriority()
|
||||
priorityI := r.middlewares[i].GetPriority()
|
||||
priorityJ := r.middlewares[j].GetPriority()
|
||||
|
||||
// 如果优先级不同,按优先级降序排列
|
||||
if priorityI != priorityJ {
|
||||
return priorityI > priorityJ
|
||||
}
|
||||
|
||||
// 如果优先级相同,按名称排序确保稳定性
|
||||
return r.middlewares[i].GetName() < r.middlewares[j].GetName()
|
||||
})
|
||||
|
||||
// 应用全局中间件
|
||||
|
||||
@@ -27,7 +27,7 @@ func (m *CORSMiddleware) GetName() string {
|
||||
|
||||
// GetPriority 返回中间件优先级
|
||||
func (m *CORSMiddleware) GetPriority() int {
|
||||
return 100 // 高优先级,最先执行
|
||||
return 95 // 在PanicRecovery(100)之后,SecurityHeaders(85)之前执行
|
||||
}
|
||||
|
||||
// Handle 返回中间件处理函数
|
||||
@@ -39,22 +39,43 @@ func (m *CORSMiddleware) Handle() gin.HandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取CORS配置
|
||||
origins := m.getAllowedOrigins()
|
||||
methods := m.getAllowedMethods()
|
||||
headers := m.getAllowedHeaders()
|
||||
|
||||
config := cors.Config{
|
||||
AllowAllOrigins: false,
|
||||
AllowOrigins: m.getAllowedOrigins(),
|
||||
AllowMethods: m.getAllowedMethods(),
|
||||
AllowHeaders: m.getAllowedHeaders(),
|
||||
AllowOrigins: origins,
|
||||
AllowMethods: methods,
|
||||
AllowHeaders: headers,
|
||||
ExposeHeaders: []string{
|
||||
"Content-Length",
|
||||
"Content-Type",
|
||||
"X-Request-ID",
|
||||
"X-Response-Time",
|
||||
"Access-Control-Allow-Origin",
|
||||
"Access-Control-Allow-Methods",
|
||||
"Access-Control-Allow-Headers",
|
||||
},
|
||||
AllowCredentials: true,
|
||||
MaxAge: 86400, // 24小时
|
||||
// 增加Chrome兼容性
|
||||
AllowWildcard: false,
|
||||
AllowBrowserExtensions: false,
|
||||
}
|
||||
|
||||
return cors.New(config)
|
||||
// 创建CORS中间件
|
||||
corsMiddleware := cors.New(config)
|
||||
|
||||
// 返回包装后的中间件
|
||||
return func(c *gin.Context) {
|
||||
// 调用实际的CORS中间件
|
||||
corsMiddleware(c)
|
||||
|
||||
// 继续处理下一个中间件或处理器
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
||||
// IsGlobal 是否为全局中间件
|
||||
|
||||
Reference in New Issue
Block a user