qdy hace 3 meses
padre
commit
77859866da
Se han modificado 2 ficheros con 59 adiciones y 6 borrados
  1. 55
    0
      auth/authentication.go
  2. 4
    6
      main.go

+ 55
- 0
auth/authentication.go Ver fichero

@@ -0,0 +1,55 @@
1
+package auth
2
+
3
+import (
4
+	"net/http"
5
+	"strings"
6
+
7
+	"github.com/gin-gonic/gin"
8
+
9
+	"git.x2erp.com/qdy/go-base/config"
10
+)
11
+
12
+func AuthMiddleware() gin.HandlerFunc {
13
+	return func(c *gin.Context) {
14
+		// 从 Header 中获取 token
15
+		authHeader := c.GetHeader("Authorization")
16
+		if authHeader == "" {
17
+			c.JSON(http.StatusUnauthorized, gin.H{
18
+				"success": false,
19
+				"error":   "Authorization header is required",
20
+			})
21
+			c.Abort()
22
+			return
23
+		}
24
+
25
+		// 检查 Bearer token 格式
26
+		parts := strings.Split(authHeader, " ")
27
+		if len(parts) != 2 || parts[0] != "Bearer" {
28
+			c.JSON(http.StatusUnauthorized, gin.H{
29
+				"success": false,
30
+				"error":   "Authorization header format must be Bearer {token}",
31
+			})
32
+			c.Abort()
33
+			return
34
+		}
35
+
36
+		tokenString := parts[1]
37
+		configTokenString := config.GetConfig().GetAuth().Token
38
+
39
+		// 比较 token 是否相等
40
+		if tokenString != configTokenString {
41
+			c.JSON(http.StatusUnauthorized, gin.H{
42
+				"success": false,
43
+				"error":   "Invalid token",
44
+			})
45
+			c.Abort()
46
+			return
47
+		}
48
+
49
+		// Token 验证通过,可以存储一些上下文信息
50
+		c.Set("authenticated", true)
51
+		c.Set("authType", "token")
52
+
53
+		c.Next()
54
+	}
55
+}

+ 4
- 6
main.go Ver fichero

@@ -10,6 +10,7 @@ import (
10 10
 
11 11
 	"git.x2erp.com/qdy/go-base/types"
12 12
 	"git.x2erp.com/qdy/go-db/factory"
13
+	"git.x2erp.com/qdy/go-service-agent/auth"
13 14
 	"git.x2erp.com/qdy/go-service-agent/routes"
14 15
 	"github.com/gin-gonic/gin"
15 16
 )
@@ -77,16 +78,13 @@ func main() {
77 78
 
78 79
 // 启动HTTP服务器
79 80
 func startHTTPServer() {
81
+	//建立路由
80 82
 	router := gin.Default()
81 83
 
82
-	// 添加中间件 重复注册
83
-	//router.Use(gin.Logger())
84
-	//router.Use(gin.Recovery())
85
-
86 84
 	// 核心路由
87 85
 	router.GET("/api/health", routes.HealthHandler(db, "oracle"))
88
-	router.POST("/api/query", withQueryRequest(routes.QueryHandler(db)))
89
-	router.POST("/api/query/csv", withQueryRequest(routes.QueryHandlerCSV(db)))
86
+	router.POST("/api/query", auth.AuthMiddleware(), withQueryRequest(routes.QueryHandler(db)))
87
+	router.POST("/api/query/csv", auth.AuthMiddleware(), withQueryRequest(routes.QueryHandlerCSV(db)))
90 88
 	router.GET("/api/info", routes.InfoHandler(dbFactory))
91 89
 
92 90
 	config := dbFactory.GetConfig()

Loading…
Cancelar
Guardar