From c7e984aac23ed0b3ce760b182e84d103f9e4dedd Mon Sep 17 00:00:00 2001 From: DullJZ <79080562+DullJZ@users.noreply.github.com> Date: Wed, 5 Nov 2025 01:20:49 +0800 Subject: [PATCH] Fix: Add CORS support for management API OPTIONS requests --- cmd/s3-balance/main.go | 3 ++- internal/api/admin_handler.go | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cmd/s3-balance/main.go b/cmd/s3-balance/main.go index 6413a8b..ad04355 100644 --- a/cmd/s3-balance/main.go +++ b/cmd/s3-balance/main.go @@ -137,8 +137,9 @@ func main() { log.Println("Management API enabled") adminHandler := api.NewAdminHandler(bucketManager, lb, cfg) - // 创建子路由器并应用Token认证中间件 + // 创建子路由器并应用中间件 apiRouter := router.PathPrefix("/api").Subrouter() + apiRouter.Use(corsMiddleware) // 先应用 CORS 中间件,处理 OPTIONS 预检请求 apiRouter.Use(middleware.TokenAuthMiddleware(cfg.API.Token)) adminHandler.RegisterRoutes(apiRouter) diff --git a/internal/api/admin_handler.go b/internal/api/admin_handler.go index 5b28a5d..38f17e1 100644 --- a/internal/api/admin_handler.go +++ b/internal/api/admin_handler.go @@ -73,9 +73,10 @@ type HealthResponse struct { // RegisterRoutes 注册管理API路由 // 注意: router 参数应该是已经带有 /api 前缀的子路由器 func (h *AdminHandler) RegisterRoutes(router *mux.Router) { - router.HandleFunc("/buckets", h.ListBuckets).Methods(http.MethodGet) - router.HandleFunc("/buckets/{name}", h.GetBucketDetail).Methods(http.MethodGet) - router.HandleFunc("/health", h.GetHealth).Methods(http.MethodGet) + // 注册路由,同时支持 OPTIONS 方法用于 CORS 预检 + router.HandleFunc("/buckets", h.ListBuckets).Methods(http.MethodGet, http.MethodOptions) + router.HandleFunc("/buckets/{name}", h.GetBucketDetail).Methods(http.MethodGet, http.MethodOptions) + router.HandleFunc("/health", h.GetHealth).Methods(http.MethodGet, http.MethodOptions) } // ListBuckets 获取存储桶列表