Files
hfb_sys/backend/internal/middleware/request_id.go
T
2026-06-02 21:40:23 +08:00

46 lines
775 B
Go

package middleware
import (
"crypto/rand"
"encoding/hex"
"github.com/gin-gonic/gin"
)
const (
RequestIDHeader = "X-Request-ID"
ContextRequestID = "request_id"
)
func RequestID() gin.HandlerFunc {
return func(c *gin.Context) {
requestID := c.GetHeader(RequestIDHeader)
if requestID == "" {
requestID = newRequestID()
}
c.Set(ContextRequestID, requestID)
c.Writer.Header().Set(RequestIDHeader, requestID)
c.Next()
}
}
func GetRequestID(c *gin.Context) string {
value, ok := c.Get(ContextRequestID)
if !ok {
return ""
}
requestID, ok := value.(string)
if !ok {
return ""
}
return requestID
}
func newRequestID() string {
buf := make([]byte, 16)
if _, err := rand.Read(buf); err != nil {
return ""
}
return hex.EncodeToString(buf)
}