package middleware import ( "strings" "tyapi-server/internal/config" "github.com/gin-gonic/gin" "go.uber.org/zap" ) // DomainAuthMiddleware 域名认证中间件 type DomainAuthMiddleware struct { config *config.Config logger *zap.Logger } // NewDomainAuthMiddleware 创建域名认证中间件 func NewDomainAuthMiddleware(cfg *config.Config, logger *zap.Logger) *DomainAuthMiddleware { return &DomainAuthMiddleware{ config: cfg, logger: logger, } } // GetName 返回中间件名称 func (m *DomainAuthMiddleware) GetName() string { return "domain_auth" } // GetPriority 返回中间件优先级 func (m *DomainAuthMiddleware) GetPriority() int { return 100 } // Handle 返回中间件处理函数 func (m *DomainAuthMiddleware) Handle(domain string) gin.HandlerFunc { return func(c *gin.Context) { // 开发环境下跳过外部验证 if m.config.App.IsDevelopment() { m.logger.Info("开发环境:跳过域名验证", zap.String("domain", domain)) c.Next() } if domain == "" { domain = m.config.API.Domain } host := c.Request.Host // 移除端口部分 if idx := strings.Index(host, ":"); idx != -1 { host = host[:idx] } m.logger.Info("域名认证中间件检查", zap.String("host", host), zap.String("domain", domain)) if host == domain { // 设置域名匹配标记 c.Set("domainMatched", domain) c.Next() } else { // 不匹配域名,跳过当前组处理,继续执行其他路由 c.Abort() return } c.Next() } } // IsGlobal 是否为全局中间件 func (m *DomainAuthMiddleware) IsGlobal() bool { return false }