diff --git a/glc/conf/config.go b/glc/conf/config.go index c67b6e8..d70d57a 100644 --- a/glc/conf/config.go +++ b/glc/conf/config.go @@ -44,7 +44,7 @@ var minioPassword string var minioBucket string var enableUploadMinio bool var goMaxProcess int -var enableCross bool +var enableCors bool func init() { cmn.SetLogLevel(cmn.GetEnvStr("GLC_LOG_LEVEL", "INFO")) // 默认INFO级别日志 @@ -91,12 +91,12 @@ func UpdateConfigByEnv() { minioBucket = cmn.GetEnvStr("GLC_MINIO_BUCKET", "") // MINIO桶名,默认“” enableUploadMinio = cmn.GetEnvBool("GLC_ENABLE_UPLOAD_MINIO", false) // 是否开启上传备份至MINIO服务器,默认false goMaxProcess = getGoMaxProcessConf(cmn.GetEnvInt("GLC_GOMAXPROCS", -1)) // 使用的最大CPU数量,默认是最大CPU数量(设定值不在实际数量范围是按最大看待) - enableCross = cmn.GetEnvBool("GLC_ENABLE_CROSS", false) // 是否允许跨域,默认false + enableCors = cmn.GetEnvBool("GLC_ENABLE_CORS", false) // 是否允许跨域,默认false } // 取配置: 是否允许跨域,可通过环境变量“GLC_ENABLE_CROSS”设定,默认false -func IsEnableCross() bool { - return enableCross +func IsEnableCors() bool { + return enableCors } // 取配置: 使用的最大CPU数量,可通过环境变量“GLC_GOMAXPROCS”设定,默认最大CPU数量 diff --git a/glc/go.mod b/glc/go.mod index 3bac439..b528e89 100644 --- a/glc/go.mod +++ b/glc/go.mod @@ -60,6 +60,7 @@ require ( ) require ( + github.com/gin-contrib/cors v1.4.0 github.com/gin-contrib/gzip v0.0.5 github.com/gin-gonic/gin v1.8.1 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db // indirect diff --git a/glc/go.sum b/glc/go.sum index 2a2e98a..ad41db5 100644 --- a/glc/go.sum +++ b/glc/go.sum @@ -21,6 +21,8 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/gin-contrib/cors v1.4.0 h1:oJ6gwtUl3lqV0WEIwM/LxPF1QZ5qe2lGWdY2+bz7y0g= +github.com/gin-contrib/cors v1.4.0/go.mod h1:bs9pNM0x/UsmHPBWT2xZz9ROh8xYjYkiURUfmBoMlcs= github.com/gin-contrib/gzip v0.0.5 h1:mhnVU32YnnBh2LPH2iqRqsA/eR7SAqRaD388jL2s/j0= github.com/gin-contrib/gzip v0.0.5/go.mod h1:OPIK6HR0Um2vNmBUTlayD7qle4yVVRZT0PyhdUigrKk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= diff --git a/glc/gweb/http_server.go b/glc/gweb/http_server.go index 2793324..4a32119 100644 --- a/glc/gweb/http_server.go +++ b/glc/gweb/http_server.go @@ -10,6 +10,7 @@ import ( "regexp" "time" + "github.com/gin-contrib/cors" "github.com/gin-contrib/gzip" "github.com/gin-gonic/gin" "github.com/gotoeasy/glang/cmn" @@ -30,15 +31,8 @@ func Run() { ginEngine := gin.Default() // 允许跨域 - if conf.IsEnableCross() { - ginEngine.Use(func(c *gin.Context) { - c.Writer.Header().Set("Access-Control-Allow-Origin", "*") - c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") - c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") - c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token,Authorization,Token,X-GLC-AUTH") - c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Content-Type,Token,X-GLC-AUTH") - c.Next() - }) + if conf.IsEnableCors() { + ginEngine.Use(newCors()) } // 按配置判断启用GZIP压缩 @@ -140,3 +134,15 @@ func Run() { cmn.Fatalln(err.Error()) // 启动失败的话打印错误信息后退出 } } + +func newCors() gin.HandlerFunc { + return cors.New(cors.Config{ + AllowAllOrigins: true, + AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, + AllowHeaders: []string{"*"}, + ExposeHeaders: []string{"Content-Length", "Authorization", "Content-Type"}, + AllowCredentials: true, + MaxAge: 12 * time.Hour, + }, + ) +}