Kaynağa Gözat

解决跨域问题

Simon Zhou 5 yıl önce
ebeveyn
işleme
e5b9ff6d84
2 değiştirilmiş dosya ile 20 ekleme ve 4 silme
  1. 0 1
      go.mod
  2. 20 3
      routers/router.go

+ 0 - 1
go.mod

@@ -44,5 +44,4 @@ require (
 	golang.org/x/tools v0.0.0-20200612220849-54c614fe050c // indirect
 	gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 // indirect
 	gopkg.in/yaml.v2 v2.3.0 // indirect
-	github.com/gin-contrib/cors v1.3.1
 )

+ 20 - 3
routers/router.go

@@ -5,9 +5,9 @@ import (
 	"mtp2_if/controllers/wrtrade"
 	"mtp2_if/logger"
 	"mtp2_if/token"
+	"net/http"
 	"time"
 
-	"github.com/gin-contrib/cors"
 	"github.com/gin-gonic/gin"
 
 	// Swagger生成的文档
@@ -24,8 +24,8 @@ func InitRouter() *gin.Engine {
 	r.Use(ginLoggerMiddleware())
 	// 设置奔溃中间件
 	r.Use(ginRecoveryMiddleware())
-	// 跨域.
-	r.Use(cors.Default())
+	// 跨域
+	r.Use(CORSMiddleware())
 	// Swagger
 	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
 
@@ -77,3 +77,20 @@ func ginLoggerMiddleware() gin.HandlerFunc {
 func ginRecoveryMiddleware() gin.HandlerFunc {
 	return gin.RecoveryWithWriter(logger.GetLogWriter())
 }
+
+// CORSMiddleware cors跨域.
+func CORSMiddleware() gin.HandlerFunc {
+	return 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-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With, X-session-Token")
+		c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT")
+		c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type, X-session-Token")
+		if c.Request.Method == "OPTIONS" {
+			c.AbortWithStatus(http.StatusNoContent)
+			return
+		}
+
+		c.Next()
+	}
+}