litemiddleware

package
v0.0.13 Latest Latest
Warning

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

Go to latest
Published: Jan 26, 2026 License: BSD-2-Clause Imports: 12 Imported by: 0

README

litemiddleware

内置 HTTP 中间件组件,提供开箱即用的通用中间件实现。

特性

  • 统一接口 - 所有中间件实现 common.IBaseMiddleware 接口
  • 灵活配置 - 配置属性使用指针类型,支持可选配置和默认值覆盖
  • 依赖注入 - 通过 inject:"" 标签自动注入 Manager 组件
  • 执行顺序 - 预定义 Order 常量,支持自定义执行顺序
  • 完整测试 - 所有中间件包含单元测试和示例

快速开始

import "github.com/lite-lake/litecore-go/component/litemiddleware"

// 使用默认配置创建中间件
recovery := litemiddleware.NewRecoveryMiddlewareWithDefaults()
reqLogger := litemiddleware.NewRequestLoggerMiddlewareWithDefaults()
cors := litemiddleware.NewCorsMiddlewareWithDefaults()
security := litemiddleware.NewSecurityHeadersMiddlewareWithDefaults()

// 注册到容器
container.RegisterMiddleware(middlewareContainer, recovery)
container.RegisterMiddleware(middlewareContainer, reqLogger)
container.RegisterMiddleware(middlewareContainer, cors)
container.RegisterMiddleware(middlewareContainer, security)

可用中间件列表

中间件 功能 Order 依赖
Recovery panic 恢复 0 LoggerManager
RequestLogger 请求日志 50 LoggerManager
CORS 跨域处理 100
SecurityHeaders 安全头 150
RateLimiter 限流 200 LimiterManager, LoggerManager
Telemetry 遥测 250 TelemetryManager

配置说明

所有中间件配置支持以下通用字段:

字段 类型 说明
Name *string 中间件名称,用于日志和标识
Order *int 执行顺序,数值越小越先执行

配置属性使用指针类型(*string, *int, *bool 等),未配置的字段将使用默认值。这种设计允许:

  • 零值区分(如 false 与未配置)
  • 默认值覆盖
  • 可选配置

Recovery 中间件

panic 恢复中间件,捕获 panic 并记录日志,返回友好的错误响应。

配置选项
字段 类型 默认值 说明
Name *string "RecoveryMiddleware" 中间件名称
Order *int 0 执行顺序
PrintStack *bool true 是否打印堆栈信息
CustomErrorBody *bool true 是否使用 JSON 格式错误响应
ErrorMessage *string "Internal server error" 自定义错误消息
ErrorCode *string "INTERNAL_SERVER_ERROR" 自定义错误代码
使用示例
// 使用默认配置
recovery := litemiddleware.NewRecoveryMiddlewareWithDefaults()

// 生产环境配置(不打印堆栈)
printStack := false
cfg := &litemiddleware.RecoveryConfig{
    PrintStack:      &printStack,
    CustomErrorBody: &[]bool{true}[0],
    ErrorMessage:    &[]string{"系统繁忙,请稍后重试"}[0],
    ErrorCode:       &[]string{"SYSTEM_BUSY"}[0],
}
recovery := litemiddleware.NewRecoveryMiddleware(cfg)

RequestLogger 中间件

请求日志中间件,记录请求和响应信息,支持日志级别控制和路径过滤。

配置选项
字段 类型 默认值 说明
Name *string "RequestLoggerMiddleware" 中间件名称
Order *int 50 执行顺序
Enable *bool true 是否启用请求日志
LogBody *bool true 是否记录请求 Body
MaxBodySize *int 4096 最大记录 Body 大小(字节),0 表示不限制
SkipPaths *[]string []{"/health", "/metrics"} 跳过日志记录的路径
LogHeaders *[]string []{"User-Agent", "Content-Type"} 需要记录的请求头
SuccessLogLevel *string "info" 成功请求日志级别(debug/info)
使用示例
// 使用默认配置
reqLogger := litemiddleware.NewRequestLoggerMiddlewareWithDefaults()

// 禁用 Body 记录,调整日志级别为 debug
logBody := false
successLogLevel := "debug"
cfg := &litemiddleware.RequestLoggerConfig{
    LogBody:         &logBody,
    SuccessLogLevel: &successLogLevel,
}
reqLogger := litemiddleware.NewRequestLoggerMiddleware(cfg)

CORS 中间件

跨域资源共享中间件,支持灵活的跨域配置。

配置选项
字段 类型 默认值 说明
Name *string "CorsMiddleware" 中间件名称
Order *int 100 执行顺序
AllowOrigins *[]string []{"*"} 允许的源
AllowMethods *[]string []{"GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"} 允许的 HTTP 方法
AllowHeaders *[]string []{"Origin", "Content-Type", "Authorization", "X-Requested-With", "Accept", "Cache-Control"} 允许的请求头
ExposeHeaders *[]string nil 暴露的响应头
AllowCredentials *bool true 是否允许携带凭证
MaxAge *time.Duration 12h 预检请求缓存时间
使用示例
// 使用默认配置(允许所有源)
cors := litemiddleware.NewCorsMiddlewareWithDefaults()

// 生产环境配置(仅允许特定域名)
allowOrigins := []string{"https://example.com", "https://app.example.com"}
allowCredentials := true
cfg := &litemiddleware.CorsConfig{
    AllowOrigins:     &allowOrigins,
    AllowCredentials: &allowCredentials,
}
cors := litemiddleware.NewCorsMiddleware(cfg)

SecurityHeaders 中间件

安全头中间件,自动添加常见的安全 HTTP 头。

配置选项
字段 类型 默认值 说明
Name *string "SecurityHeadersMiddleware" 中间件名称
Order *int 150 执行顺序
FrameOptions *string "DENY" X-Frame-Options
ContentTypeOptions *string "nosniff" X-Content-Type-Options
XSSProtection *string "1; mode=block" X-XSS-Protection
ReferrerPolicy *string "strict-origin-when-cross-origin" Referrer-Policy
ContentSecurityPolicy *string nil Content-Security-Policy
StrictTransportSecurity *string nil Strict-Transport-Security
使用示例
// 使用默认配置
security := litemiddleware.NewSecurityHeadersMiddlewareWithDefaults()

// 添加 CSP 和 HSTS
csp := "default-src 'self'; script-src 'self'"
hsts := "max-age=31536000; includeSubDomains"
cfg := &litemiddleware.SecurityHeadersConfig{
    ContentSecurityPolicy:   &csp,
    StrictTransportSecurity: &hsts,
}
security := litemiddleware.NewSecurityHeadersMiddleware(cfg)

RateLimiter 中间件

限流中间件,基于时间窗口的请求频率控制,支持多种限流策略。

配置选项
字段 类型 默认值 说明
Name *string "RateLimiterMiddleware" 中间件名称
Order *int 200 执行顺序
Limit *int 100 时间窗口内最大请求数
Window *time.Duration 1m 时间窗口大小
KeyFunc KeyFunc func(c) string { c.ClientIP() } 自定义 key 生成函数
SkipFunc SkipFunc nil 跳过限流的条件
KeyPrefix *string "rate_limit" key 前缀
使用示例
// 使用默认配置(按 IP 限流,每分钟 100 次请求)
limiter := litemiddleware.NewRateLimiterMiddlewareWithDefaults()

// 按用户 ID 限流,自定义跳过条件
limit := 10
window := time.Minute
keyPrefix := "user"
cfg := &litemiddleware.RateLimiterConfig{
    Limit:     &limit,
    Window:    &window,
    KeyPrefix: &keyPrefix,
    KeyFunc: func(c *gin.Context) string {
        if userID, exists := c.Get("user_id"); exists {
            return userID.(string)
        }
        return c.ClientIP()
    },
    SkipFunc: func(c *gin.Context) bool {
        return c.GetHeader("X-Internal") == "true"
    },
}
limiter := litemiddleware.NewRateLimiterMiddleware(cfg)
响应头
响应头 说明
X-RateLimit-Limit 时间窗口内最大请求数
X-RateLimit-Remaining 剩余可用请求数
X-RateLimit-Reset 窗口重置时间
Retry-After 限流时重试等待时间

Telemetry 中间件

遥测中间件,集成 OpenTelemetry 进行链路追踪和指标采集。

配置选项
字段 类型 默认值 说明
Name string "TelemetryMiddleware" 中间件名称
Order *int 250 执行顺序
使用示例
// 使用默认配置(依赖注入 TelemetryManager)
telemetry := litemiddleware.NewTelemetryMiddlewareWithDefaults()

执行顺序

预定义的中间件执行顺序(按 Order 值从小到大):

Order 中间件 说明
0 Recovery panic 恢复(最先执行)
50 RequestLogger 请求日志
100 CORS 跨域处理
150 SecurityHeaders 安全头
200 RateLimiter 限流
250 Telemetry 遥测
300 Auth 认证(预留)

业务自定义中间件建议从 Order 350 开始。

依赖注入

中间件通过依赖注入获取 Manager 组件:

type requestLoggerMiddleware struct {
    LoggerMgr loggermgr.ILoggerManager `inject:""`
    cfg       *RequestLoggerConfig
}

type rateLimiterMiddleware struct {
    LimiterMgr limitermgr.ILimiterManager `inject:""`
    LoggerMgr  loggermgr.ILoggerManager   `inject:""`
    config     *RateLimiterConfig
}

type telemetryMiddleware struct {
    TelemetryManager telemetrymgr.ITelemetryManager `inject:""`
    cfg              *TelemetryConfig
}

API

配置结构
RecoveryConfig

panic 恢复中间件配置

type RecoveryConfig struct {
    Name            *string // 中间件名称
    Order           *int    // 执行顺序
    PrintStack      *bool   // 是否打印堆栈信息
    CustomErrorBody *bool   // 是否使用自定义错误响应
    ErrorMessage    *string // 自定义错误消息
    ErrorCode       *string // 自定义错误代码
}
RequestLoggerConfig

请求日志中间件配置

type RequestLoggerConfig struct {
    Name            *string   // 中间件名称
    Order           *int      // 执行顺序
    Enable          *bool     // 是否启用请求日志
    LogBody         *bool     // 是否记录请求 Body
    MaxBodySize     *int      // 最大记录 Body 大小(字节),0 表示不限制
    SkipPaths       *[]string // 跳过日志记录的路径
    LogHeaders      *[]string // 需要记录的请求头
    SuccessLogLevel *string   // 成功请求日志级别(debug/info)
}
CorsConfig

CORS 跨域中间件配置

type CorsConfig struct {
    Name             *string        // 中间件名称
    Order            *int           // 执行顺序
    AllowOrigins     *[]string      // 允许的源
    AllowMethods     *[]string      // 允许的 HTTP 方法
    AllowHeaders     *[]string      // 允许的请求头
    ExposeHeaders    *[]string      // 暴露的响应头
    AllowCredentials *bool          // 是否允许携带凭证
    MaxAge           *time.Duration // 预检请求缓存时间
}
SecurityHeadersConfig

安全头中间件配置

type SecurityHeadersConfig struct {
    Name                    *string // 中间件名称
    Order                   *int    // 执行顺序
    FrameOptions            *string // X-Frame-Options (DENY, SAMEORIGIN, ALLOW-FROM)
    ContentTypeOptions      *string // X-Content-Type-Options (nosniff)
    XSSProtection           *string // X-XSS-Protection (1; mode=block)
    ReferrerPolicy          *string // Referrer-Policy (strict-origin-when-cross-origin, no-referrer, etc)
    ContentSecurityPolicy   *string // Content-Security-Policy
    StrictTransportSecurity *string // Strict-Transport-Security (max-age=31536000; includeSubDomains)
}
RateLimiterConfig

限流中间件配置

type RateLimiterConfig struct {
    Name      *string        // 中间件名称
    Order     *int           // 执行顺序
    Limit     *int           // 时间窗口内最大请求数
    Window    *time.Duration // 时间窗口大小
    KeyFunc   KeyFunc        // 自定义 key 生成函数(可选,默认按 IP)
    SkipFunc  SkipFunc       // 跳过限流的条件(可选)
    KeyPrefix *string        // key 前缀
}

type KeyFunc  func(c *gin.Context) string // key 生成函数类型
type SkipFunc func(c *gin.Context) bool  // 跳过条件函数类型
TelemetryConfig

遥测中间件配置

type TelemetryConfig struct {
    Name  string // 中间件名称
    Order *int   // 执行顺序(指针类型用于判断是否设置)
}
构造函数
Recovery 中间件
func NewRecoveryMiddleware(config *RecoveryConfig) common.IBaseMiddleware
func NewRecoveryMiddlewareWithDefaults() common.IBaseMiddleware
RequestLogger 中间件
func NewRequestLoggerMiddleware(config *RequestLoggerConfig) common.IBaseMiddleware
func NewRequestLoggerMiddlewareWithDefaults() common.IBaseMiddleware
CORS 中间件
func NewCorsMiddleware(config *CorsConfig) common.IBaseMiddleware
func NewCorsMiddlewareWithDefaults() common.IBaseMiddleware
SecurityHeaders 中间件
func NewSecurityHeadersMiddleware(config *SecurityHeadersConfig) common.IBaseMiddleware
func NewSecurityHeadersMiddlewareWithDefaults() common.IBaseMiddleware
RateLimiter 中间件
func NewRateLimiterMiddleware(config *RateLimiterConfig) common.IBaseMiddleware
func NewRateLimiterMiddlewareWithDefaults() common.IBaseMiddleware
Telemetry 中间件
func NewTelemetryMiddleware(config *TelemetryConfig) common.IBaseMiddleware
func NewTelemetryMiddlewareWithDefaults() common.IBaseMiddleware
常量
执行顺序常量
const (
    OrderRecovery        = 0   // panic 恢复中间件(最先执行)
    OrderRequestLogger   = 50  // 请求日志中间件
    OrderCORS            = 100 // CORS 跨域中间件
    OrderSecurityHeaders = 150 // 安全头中间件
    OrderRateLimiter     = 200 // 限流中间件(认证前执行)
    OrderTelemetry       = 250 // 遥测中间件
    OrderAuth            = 300 // 认证中间件(预留)
)
响应头常量(RateLimiter)
const (
    RateLimitLimitHeader     = "X-RateLimit-Limit"     // 时间窗口内最大请求数
    RateLimitRemainingHeader = "X-RateLimit-Remaining" // 剩余可用请求数
    RateLimitResetHeader     = "X-RateLimit-Reset"     // 窗口重置时间
)

业务层封装

在业务项目中,可以定义自己的中间件接口并封装 litemiddleware 的实现:

// internal/middlewares/cors_middleware.go
package middlewares

import (
    "github.com/lite-lake/litecore-go/common"
    "github.com/lite-lake/litecore-go/component/litemiddleware"
)

type ICorsMiddleware interface {
    common.IBaseMiddleware
}

func NewCorsMiddleware() ICorsMiddleware {
    return litemiddleware.NewCorsMiddlewareWithDefaults()
}

func NewProductionCorsMiddleware() ICorsMiddleware {
    allowOrigins := []string{"https://example.com"}
    allowCredentials := true
    return litemiddleware.NewCorsMiddleware(&litemiddleware.CorsConfig{
        AllowOrigins:     &allowOrigins,
        AllowCredentials: &allowCredentials,
    })
}

性能优化建议

  • RequestLogger:生产环境关闭 Body 记录(LogBody: false
  • Recovery:生产环境关闭堆栈打印(PrintStack: false
  • RateLimiter:合理设置 Limit 和 Window,避免过度限制
  • SkipFunc:使用 SkipFunc 跳过内部请求或健康检查的限流

版本历史

v2.0.0 (2026-01-24)
  • 目录重构:从 component/middleware 迁移至 component/litemiddleware
  • 包名变更middlewarelitemiddleware
  • 配置增强:所有中间件支持通过配置自定义 Name 和 Order
  • 配置重构:配置属性改为指针类型,支持可选配置
  • 新增功能:RateLimiter 限流中间件
  • 示例完善:添加了完整的使用示例和测试用例

Documentation

Overview

Package litemiddleware 提供 HTTP 中间件组件,实现开箱即用的通用中间件功能。

核心特性:

  • 统一接口:所有中间件实现 common.IBaseMiddleware 接口,保持一致的使用方式
  • 灵活配置:配置属性使用指针类型,支持可选配置和默认值覆盖
  • 依赖注入:通过 inject:"" 标签自动注入 Manager 组件(LoggerManager、LimiterManager、TelemetryManager)
  • 执行顺序:预定义 Order 常量,支持自定义执行顺序,确保中间件按预期顺序执行
  • 完整测试:所有中间件包含单元测试和示例代码,便于理解和使用

基本用法:

// 使用默认配置创建中间件
recovery := litemiddleware.NewRecoveryMiddlewareWithDefaults()
reqLogger := litemiddleware.NewRequestLoggerMiddlewareWithDefaults()
cors := litemiddleware.NewCorsMiddlewareWithDefaults()
security := litemiddleware.NewSecurityHeadersMiddlewareWithDefaults()
limiter := litemiddleware.NewRateLimiterMiddlewareWithDefaults()
telemetry := litemiddleware.NewTelemetryMiddlewareWithDefaults()

// 注册到容器
container.RegisterMiddleware(middlewareContainer, recovery)
container.RegisterMiddleware(middlewareContainer, reqLogger)
container.RegisterMiddleware(middlewareContainer, cors)
container.RegisterMiddleware(middlewareContainer, security)
container.RegisterMiddleware(middlewareContainer, limiter)
container.RegisterMiddleware(middlewareContainer, telemetry)

自定义配置:

// 自定义 CORS 配置
allowOrigins := []string{"https://example.com"}
allowCredentials := true
cors := litemiddleware.NewCorsMiddleware(&litemiddleware.CorsConfig{
    AllowOrigins:     &allowOrigins,
    AllowCredentials: &allowCredentials,
})

// 自定义限流配置
limit := 100
window := time.Minute
keyPrefix := "api"
limiter := litemiddleware.NewRateLimiterMiddleware(&litemiddleware.RateLimiterConfig{
    Limit:     &limit,
    Window:    &window,
    KeyPrefix: &keyPrefix,
})

执行顺序:

// 自定义中间件名称和执行顺序
name := "CustomMiddleware"
order := 350
customMiddleware := litemiddleware.NewCorsMiddleware(&litemiddleware.CorsConfig{
    Name:  &name,
    Order: &order,
})

配置属性说明:

所有中间件配置支持以下通用字段:

  • Name (*string): 中间件名称,用于日志和标识
  • Order (*int): 执行顺序,数值越小越先执行

配置属性使用指针类型(*string, *int, *bool 等),未配置的字段将使用默认值。 这种设计允许零值区分(如 false 与未配置)、默认值覆盖和可选配置。

可用中间件列表:

| 中间件 | 功能 | 默认 Order | 依赖 | |--------|------|-----------|------| | Recovery | panic 恢复 | 0 | LoggerManager | | RequestLogger | 请求日志 | 50 | LoggerManager | | CORS | 跨域处理 | 100 | 无 | | SecurityHeaders | 安全头 | 150 | 无 | | RateLimiter | 限流 | 200 | LimiterManager, LoggerManager | | Telemetry | 遥测 | 250 | TelemetryManager |

预定义 Order 常量:

  • OrderRecovery = 0: panic 恢复中间件(最先执行)
  • OrderRequestLogger = 50: 请求日志中间件
  • OrderCORS = 100: CORS 跨域中间件
  • OrderSecurityHeaders = 150: 安全头中间件
  • OrderRateLimiter = 200: 限流中间件
  • OrderTelemetry = 250: 遥测中间件
  • OrderAuth = 300: 认证中间件(预留)

业务自定义中间件建议从 Order 350 开始。

Example (CustomCorsConfig)

示例 2: 自定义 CORS 配置

package main

import (
	"time"

	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 自定义 CORS 配置
	allowOrigins := []string{"https://example.com", "https://app.example.com"}
	allowMethods := []string{"GET", "POST", "PUT", "DELETE"}
	allowHeaders := []string{"Content-Type", "Authorization"}
	exposeHeaders := []string{"Content-Length"}
	allowCredentials := true
	maxAge := 8 * time.Hour
	cfg := &litemiddleware.CorsConfig{
		AllowOrigins:     &allowOrigins,
		AllowMethods:     &allowMethods,
		AllowHeaders:     &allowHeaders,
		ExposeHeaders:    &exposeHeaders,
		AllowCredentials: &allowCredentials,
		MaxAge:           &maxAge,
	}
	cors := litemiddleware.NewCorsMiddleware(cfg)

	_ = cors
}
Example (CustomRateLimiterConfig)

示例 6: 自定义限流配置

package main

import (
	"time"

	"github.com/gin-gonic/gin"

	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 按自定义配置创建限流中间件
	limit := 100
	window := time.Minute
	keyPrefix := "api"
	cfg := &litemiddleware.RateLimiterConfig{
		Limit:     &limit,
		Window:    &window,
		KeyPrefix: &keyPrefix,
		KeyFunc: func(c *gin.Context) string {
			// 自定义 key 生成逻辑
			// 可以基于请求路径、用户ID、IP等生成唯一key
			return c.ClientIP()
		},
		SkipFunc: func(c *gin.Context) bool {
			// 跳过某些请求的限流检查
			// 例如:内部IP、白名单用户等
			return false
		},
	}
	limiter := litemiddleware.NewRateLimiterMiddleware(cfg)

	_ = limiter
}
Example (CustomRecoveryConfig)

示例 5: 自定义 Recovery 配置

package main

import (
	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 自定义 Recovery 配置
	printStack := true
	customErrorBody := true
	errorMessage := "服务器内部错误,请稍后重试"
	errorCode := "SERVER_ERROR"
	cfg := &litemiddleware.RecoveryConfig{
		PrintStack:      &printStack,
		CustomErrorBody: &customErrorBody,
		ErrorMessage:    &errorMessage,
		ErrorCode:       &errorCode,
	}
	recovery := litemiddleware.NewRecoveryMiddleware(cfg)

	_ = recovery
}
Example (CustomRequestLoggerConfig)

示例 3: 自定义请求日志配置

package main

import (
	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 自定义请求日志配置
	enable := true
	logBody := true
	maxBodySize := 2048
	skipPaths := []string{"/health", "/metrics", "/ping"}
	logHeaders := []string{"User-Agent", "Content-Type", "X-Request-ID"}
	successLogLevel := "debug"
	cfg := &litemiddleware.RequestLoggerConfig{
		Enable:          &enable,
		LogBody:         &logBody,
		MaxBodySize:     &maxBodySize,
		SkipPaths:       &skipPaths,
		LogHeaders:      &logHeaders,
		SuccessLogLevel: &successLogLevel,
	}
	reqLogger := litemiddleware.NewRequestLoggerMiddleware(cfg)

	_ = reqLogger
}
Example (CustomSecurityHeadersConfig)

示例 4: 自定义安全头配置

package main

import (
	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 自定义安全头配置
	frameOptions := "SAMEORIGIN"
	contentTypeOptions := "nosniff"
	xssProtection := "1; mode=block"
	referrerPolicy := "strict-origin-when-cross-origin"
	contentSecurityPolicy := "default-src 'self'; script-src 'self' 'unsafe-inline'"
	strictTransportSecurity := "max-age=31536000; includeSubDomains"
	cfg := &litemiddleware.SecurityHeadersConfig{
		FrameOptions:            &frameOptions,
		ContentTypeOptions:      &contentTypeOptions,
		XSSProtection:           &xssProtection,
		ReferrerPolicy:          &referrerPolicy,
		ContentSecurityPolicy:   &contentSecurityPolicy,
		StrictTransportSecurity: &strictTransportSecurity,
	}
	security := litemiddleware.NewSecurityHeadersMiddleware(cfg)

	_ = security
}
Example (DisableRequestLogger)

示例 9: 关闭请求日志

package main

import (
	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 完全禁用请求日志
	enable := false
	cfg := &litemiddleware.RequestLoggerConfig{
		Enable: &enable,
	}
	reqLogger := litemiddleware.NewRequestLoggerMiddleware(cfg)

	_ = reqLogger
}
Example (NewMiddlewareWithDefaults)

示例 1: 使用默认配置创建中间件

package main

import (
	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 使用默认配置
	cors := litemiddleware.NewCorsMiddlewareWithDefaults()
	recovery := litemiddleware.NewRecoveryMiddlewareWithDefaults()
	security := litemiddleware.NewSecurityHeadersMiddlewareWithDefaults()
	reqLogger := litemiddleware.NewRequestLoggerMiddlewareWithDefaults()

	_ = cors
	_ = recovery
	_ = security
	_ = reqLogger
}
Example (ProductionCorsConfig)

示例 8: 闭包配置生产环境 CORS

package main

import (
	"time"

	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 生产环境 CORS 配置(仅允许特定域名)
	allowOrigins := []string{
		"https://example.com",
		"https://www.example.com",
	}
	allowMethods := []string{
		"GET",
		"POST",
		"PUT",
		"DELETE",
		"OPTIONS",
	}
	allowHeaders := []string{
		"Origin",
		"Content-Type",
		"Authorization",
		"Accept",
	}
	allowCredentials := true
	maxAge := 12 * time.Hour
	cfg := &litemiddleware.CorsConfig{
		AllowOrigins:     &allowOrigins,
		AllowMethods:     &allowMethods,
		AllowHeaders:     &allowHeaders,
		AllowCredentials: &allowCredentials,
		MaxAge:           &maxAge,
	}
	cors := litemiddleware.NewCorsMiddleware(cfg)

	_ = cors
}
Example (RateLimiterConfigurations)

示例 7: 使用配置创建不同类型的限流中间件

package main

import (
	"time"

	"github.com/gin-gonic/gin"

	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 按IP限流
	limit1 := 100
	window1 := time.Minute
	keyPrefix1 := "ip"
	byIP := litemiddleware.NewRateLimiterMiddleware(&litemiddleware.RateLimiterConfig{
		Limit:     &limit1,
		Window:    &window1,
		KeyPrefix: &keyPrefix1,
	})
	// 按路径限流
	limit2 := 200
	window2 := time.Minute
	keyPrefix2 := "path"
	byPath := litemiddleware.NewRateLimiterMiddleware(&litemiddleware.RateLimiterConfig{
		Limit:     &limit2,
		Window:    &window2,
		KeyPrefix: &keyPrefix2,
		KeyFunc: func(c *gin.Context) string {
			return c.Request.URL.Path
		},
	})
	// 按请求头限流
	limit3 := 50
	window3 := time.Minute
	keyPrefix3 := "header"
	byHeader := litemiddleware.NewRateLimiterMiddleware(&litemiddleware.RateLimiterConfig{
		Limit:     &limit3,
		Window:    &window3,
		KeyPrefix: &keyPrefix3,
		KeyFunc: func(c *gin.Context) string {
			return c.GetHeader("X-User-ID")
		},
	})
	// 按用户ID限流
	limit4 := 10
	window4 := time.Minute
	keyPrefix4 := "user"
	byUserID := litemiddleware.NewRateLimiterMiddleware(&litemiddleware.RateLimiterConfig{
		Limit:     &limit4,
		Window:    &window4,
		KeyPrefix: &keyPrefix4,
		KeyFunc: func(c *gin.Context) string {
			if userID, exists := c.Get("user_id"); exists {
				if uid, ok := userID.(string); ok {
					return uid
				}
			}
			return c.ClientIP()
		},
	})

	_ = byIP
	_ = byPath
	_ = byHeader
	_ = byUserID
}
Example (RecoveryWithoutStack)

示例 10: 关闭 Recovery 堆栈打印(生产环境可能不需要)

package main

import (
	"github.com/lite-lake/litecore-go/component/litemiddleware"
)

func main() {
	// 不打印堆栈信息(生产环境可能为了性能)
	printStack := false
	customErrorBody := true
	errorMessage := "系统错误"
	errorCode := "SYSTEM_ERROR"
	cfg := &litemiddleware.RecoveryConfig{
		PrintStack:      &printStack,
		CustomErrorBody: &customErrorBody,
		ErrorMessage:    &errorMessage,
		ErrorCode:       &errorCode,
	}
	recovery := litemiddleware.NewRecoveryMiddleware(cfg)

	_ = recovery
}

Index

Examples

Constants

View Source
const (
	OrderRecovery        = 0   // panic 恢复中间件(最先执行)
	OrderRequestLogger   = 50  // 请求日志中间件
	OrderCORS            = 100 // CORS 跨域中间件
	OrderSecurityHeaders = 150 // 安全头中间件
	OrderRateLimiter     = 200 // 限流中间件(认证前执行)
	OrderTelemetry       = 250 // 遥测中间件
	OrderAuth            = 300 // 认证中间件

)
View Source
const (
	// 速率限制响应头
	RateLimitLimitHeader     = "X-RateLimit-Limit"
	RateLimitRemainingHeader = "X-RateLimit-Remaining"
	RateLimitResetHeader     = "X-RateLimit-Reset"
)

Variables

This section is empty.

Functions

func NewCorsMiddleware

func NewCorsMiddleware(config *CorsConfig) common.IBaseMiddleware

NewCorsMiddleware 创建 CORS 中间件

func NewCorsMiddlewareWithDefaults

func NewCorsMiddlewareWithDefaults() common.IBaseMiddleware

NewCorsMiddlewareWithDefaults 使用默认配置创建 CORS 中间件

func NewRateLimiterMiddleware

func NewRateLimiterMiddleware(config *RateLimiterConfig) common.IBaseMiddleware

func NewRateLimiterMiddlewareWithDefaults

func NewRateLimiterMiddlewareWithDefaults() common.IBaseMiddleware

NewRateLimiterMiddlewareWithDefaults 使用默认配置创建限流中间件

func NewRecoveryMiddleware

func NewRecoveryMiddleware(config *RecoveryConfig) common.IBaseMiddleware

NewRecoveryMiddleware 创建 panic 恢复中间件

func NewRecoveryMiddlewareWithDefaults

func NewRecoveryMiddlewareWithDefaults() common.IBaseMiddleware

NewRecoveryMiddlewareWithDefaults 使用默认配置创建 panic 恢复中间件

func NewRequestLoggerMiddleware

func NewRequestLoggerMiddleware(config *RequestLoggerConfig) common.IBaseMiddleware

NewRequestLoggerMiddleware 创建请求日志中间件

func NewRequestLoggerMiddlewareWithDefaults

func NewRequestLoggerMiddlewareWithDefaults() common.IBaseMiddleware

NewRequestLoggerMiddlewareWithDefaults 使用默认配置创建请求日志中间件

func NewSecurityHeadersMiddleware

func NewSecurityHeadersMiddleware(config *SecurityHeadersConfig) common.IBaseMiddleware

NewSecurityHeadersMiddleware 创建安全头中间件

func NewSecurityHeadersMiddlewareWithDefaults

func NewSecurityHeadersMiddlewareWithDefaults() common.IBaseMiddleware

NewSecurityHeadersMiddlewareWithDefaults 使用默认配置创建安全头中间件

func NewTelemetryMiddleware

func NewTelemetryMiddleware(config *TelemetryConfig) common.IBaseMiddleware

NewTelemetryMiddleware 创建遥测中间件

func NewTelemetryMiddlewareWithDefaults

func NewTelemetryMiddlewareWithDefaults() common.IBaseMiddleware

NewTelemetryMiddlewareWithDefaults 使用默认配置创建遥测中间件

Types

type CorsConfig

type CorsConfig struct {
	Name             *string        // 中间件名称
	Order            *int           // 执行顺序
	AllowOrigins     *[]string      // 允许的源
	AllowMethods     *[]string      // 允许的 HTTP 方法
	AllowHeaders     *[]string      // 允许的请求头
	ExposeHeaders    *[]string      // 暴露的响应头
	AllowCredentials *bool          // 是否允许携带凭证
	MaxAge           *time.Duration // 预检请求缓存时间
}

CorsConfig CORS 配置

func DefaultCorsConfig

func DefaultCorsConfig() *CorsConfig

DefaultCorsConfig 默认 CORS 配置

type KeyFunc

type KeyFunc func(c *gin.Context) string

type RateLimiterConfig

type RateLimiterConfig struct {
	Name      *string        // 中间件名称
	Order     *int           // 执行顺序
	Limit     *int           // 时间窗口内最大请求数
	Window    *time.Duration // 时间窗口大小
	KeyFunc   KeyFunc        // 自定义key生成函数(可选,默认按IP)
	SkipFunc  SkipFunc       // 跳过限流的条件(可选)
	KeyPrefix *string        // key前缀
}

func DefaultRateLimiterConfig

func DefaultRateLimiterConfig() *RateLimiterConfig

DefaultRateLimiterConfig 默认限流配置

type RecoveryConfig

type RecoveryConfig struct {
	Name            *string // 中间件名称
	Order           *int    // 执行顺序
	PrintStack      *bool   // 是否打印堆栈信息
	CustomErrorBody *bool   // 是否使用自定义错误响应
	ErrorMessage    *string // 自定义错误消息
	ErrorCode       *string // 自定义错误代码
}

RecoveryConfig panic 恢复配置

func DefaultRecoveryConfig

func DefaultRecoveryConfig() *RecoveryConfig

DefaultRecoveryConfig 默认 panic 恢复配置

type RequestLoggerConfig

type RequestLoggerConfig struct {
	Name            *string   // 中间件名称
	Order           *int      // 执行顺序
	Enable          *bool     // 是否启用请求日志
	LogBody         *bool     // 是否记录请求 Body
	MaxBodySize     *int      // 最大记录 Body 大小(字节),0 表示不限制
	SkipPaths       *[]string // 跳过日志记录的路径
	LogHeaders      *[]string // 需要记录的请求头
	SuccessLogLevel *string   // 成功请求日志级别(debug/info)
}

RequestLoggerConfig 请求日志配置

func DefaultRequestLoggerConfig

func DefaultRequestLoggerConfig() *RequestLoggerConfig

DefaultRequestLoggerConfig 默认请求日志配置

type SecurityHeadersConfig

type SecurityHeadersConfig struct {
	Name                    *string // 中间件名称
	Order                   *int    // 执行顺序
	FrameOptions            *string // X-Frame-Options (DENY, SAMEORIGIN, ALLOW-FROM)
	ContentTypeOptions      *string // X-Content-Type-Options (nosniff)
	XSSProtection           *string // X-XSS-Protection (1; mode=block)
	ReferrerPolicy          *string // Referrer-Policy (strict-origin-when-cross-origin, no-referrer, etc)
	ContentSecurityPolicy   *string // Content-Security-Policy
	StrictTransportSecurity *string // Strict-Transport-Security (max-age=31536000; includeSubDomains)
}

SecurityHeadersConfig 安全头配置

func DefaultSecurityHeadersConfig

func DefaultSecurityHeadersConfig() *SecurityHeadersConfig

DefaultSecurityHeadersConfig 默认安全头配置

type SkipFunc

type SkipFunc func(c *gin.Context) bool

type TelemetryConfig

type TelemetryConfig struct {
	Name  string // 中间件名称
	Order *int   // 执行顺序(指针类型用于判断是否设置)
}

TelemetryConfig 遥测配置

func DefaultTelemetryConfig

func DefaultTelemetryConfig() *TelemetryConfig

DefaultTelemetryConfig 默认遥测配置

Jump to

Keyboard shortcuts

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