暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

auth_db_middleware.go 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package auth
  2. import (
  3. "context"
  4. "net/http"
  5. "git.x2erp.com/qdy/go-db/factory/database"
  6. )
  7. // AuthMiddlewareHttp 验证 Authorization 头和项目 ID 头
  8. func AuthMiddlewareHttp(next http.Handler, dbFactory *database.DBFactory) http.Handler {
  9. return authMiddleware(1, next, dbFactory)
  10. }
  11. // AuthMiddlewareMcp 验证 Authorization 头和项目 ID 头
  12. func AuthMiddlewareMcp(next http.Handler, dbFactory *database.DBFactory) http.Handler {
  13. return authMiddleware(2, next, dbFactory)
  14. }
  15. // authMiddleware 验证 Authorization 头和项目 ID 头
  16. func authMiddleware(ser int, next http.Handler, dbFactory *database.DBFactory) http.Handler {
  17. projectIDHeader := "X-Project-ID"
  18. authToken := "123"
  19. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  20. // 验证 Authorization 头
  21. authHeader := r.Header.Get("Authorization")
  22. if authHeader == "" {
  23. http.Error(w, "Authorization header required", http.StatusUnauthorized)
  24. return
  25. }
  26. expected := "Bearer " + authToken
  27. if authHeader != expected {
  28. http.Error(w, "Invalid authorization token", http.StatusUnauthorized)
  29. return
  30. }
  31. // 提取项目 ID 头并存储到请求上下文中,供 extractRequestContext 使用
  32. projectID := r.Header.Get(projectIDHeader)
  33. if projectID != "" {
  34. // 将项目 ID 存储到上下文中
  35. ctx := context.WithValue(r.Context(), "projectID", projectID)
  36. r = r.WithContext(ctx)
  37. }
  38. next.ServeHTTP(w, r)
  39. })
  40. }