middleware

package
v0.15.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 6, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package middleware 提供 ginx 内置的 HTTP 中间件实现。

包含请求 ID 生成、跨域处理、请求超时、Panic 捕获、参数校验和 IP 限流等 6 个工业级中间件。 所有中间件通过 Manager 统一管理,支持禁用、覆盖和外部替换。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CORS

func CORS(cfg CORSConfig) gin.HandlerFunc

CORS 返回一个 CORS 跨域处理中间件。

根据配置自动设置 CORS 响应头,处理 OPTIONS 预检请求。 若请求 Origin 不在允许列表中,返回 403。

func RateLimit

func RateLimit(rl *RateLimiter) gin.HandlerFunc

RateLimit 返回一个 IP 令牌桶限流中间件。

超限返回标准化 429 响应,白名单 IP/CIDR 直接放行。

func Recovery

func Recovery() gin.HandlerFunc

Recovery 返回一个 Panic 捕获中间件。

这是组件库中唯一调用 recover() 的位置。 当 handler 中发生 panic 时,Recovery 捕获并记录调用栈, 向客户端返回标准化 500 响应。

func RequestID

func RequestID() gin.HandlerFunc

RequestID 返回一个请求 ID 生成中间件。

优先使用请求头 X-Request-ID 的值,若不存在则生成 UUID v4。 生成的 ID 写入 gin.Context 的 "requestId" 键和响应头 X-Request-ID。

func Timeout

func Timeout(timeout time.Duration) gin.HandlerFunc

Timeout 返回一个请求超时中间件。

向请求注入带超时的 Context,下游 Handler 应响应 ctx.Done() 以提前退出。 超时后 Handler 的写入被丢弃,并返回 503 响应。 若 timeout <= 0,则中间件不执行任何操作,直接放行。

与旧版不同:不再将 c.Next() 放入 goroutine,避免 *gin.Context 的 data race 和 sync.Pool 污染问题。

func Validation

func Validation() gin.HandlerFunc

Validation 返回一个请求参数校验中间件。

校验 Content-Type 是否为 JSON、Content-Length 是否合理。 校验失败返回标准化 400 响应。

Types

type CORSConfig

type CORSConfig struct {
	// AllowedOrigins 允许的来源列表,"*" 表示允许所有来源。
	AllowedOrigins []string

	// AllowedMethods 允许的 HTTP 方法列表。
	AllowedMethods []string

	// AllowedHeaders 允许的请求头列表。
	AllowedHeaders []string

	// MaxAge 预检请求缓存时间(秒)。
	MaxAge int
}

CORSConfig 定义 CORS 中间件的配置参数。

func DefaultCORSConfig

func DefaultCORSConfig() CORSConfig

DefaultCORSConfig 返回一组常用的 CORS 默认配置。

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager 管理内置中间件的注册表、执行顺序和启用状态。

调用方通过 Server 的方法间接操作 Manager,不直接使用此类型。

func NewManager

func NewManager() *Manager

NewManager 创建一个新的中间件管理器。

默认启用全部 6 个内置中间件(RateLimit 注册但默认禁用)。

func (*Manager) Append

func (m *Manager) Append(handler ...gin.HandlerFunc)

Append 追加外部全局中间件到中间件链的末尾(路由专属中间件之前)。

func (*Manager) Build

func (m *Manager) Build(ctx context.Context) []gin.HandlerFunc

Build 构建最终执行的中间件链。

按照注册顺序返回已过滤(跳过禁用项、使用覆盖项)的 HandlerFunc 列表。 返回顺序:内置(启用)→ 外部全局 → 可用于路由专属。

func (*Manager) Disable

func (m *Manager) Disable(mt ...string)

Disable 禁用指定类型的内置中间件。

func (*Manager) DisableRateLimit

func (m *Manager) DisableRateLimit()

DisableRateLimit 禁用限流中间件并移除其 Handler。

func (*Manager) Enable

func (m *Manager) Enable(mt ...string)

Enable 启用指定类型的内置中间件。

注意:RateLimit 中间件必须通过 EnableRateLimit 激活, 仅调用 Enable 对其无效。

func (*Manager) EnableRateLimit

func (m *Manager) EnableRateLimit(handler gin.HandlerFunc)

EnableRateLimit 启用限流中间件并注册其 Handler。

func (*Manager) Override

func (m *Manager) Override(mt string, handler gin.HandlerFunc)

Override 覆盖指定类型的内置中间件,使用调用方提供的自定义 Handler。

func (*Manager) RegisterBuiltin

func (m *Manager) RegisterBuiltin(key string, handler gin.HandlerFunc)

RegisterBuiltin 注册一个内置中间件到管理器。

key 为中间件类型字符串,如 "request_id"、"cors" 等。 handler 为中间件工厂函数返回的 gin.HandlerFunc。

type RateLimiter

type RateLimiter struct {
	// contains filtered or unexported fields
}

RateLimiter 实现基于 IP 的令牌桶限流。

func NewRateLimiter

func NewRateLimiter(qps int, window time.Duration, whitelistCIDRs []string) *RateLimiter

NewRateLimiter 创建一个新的 IP 限流器。

qps 为每秒允许的请求数,window 为限流窗口,whitelist 为白名单 CIDR 列表。

func (*RateLimiter) Allow

func (rl *RateLimiter) Allow(ip string) bool

Allow 检查指定 IP 是否被允许通过。

func (*RateLimiter) Cleanup

func (rl *RateLimiter) Cleanup(interval time.Duration)

Cleanup 清理过期的桶。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL