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 ¶
- Constants
- func NewCorsMiddleware(config *CorsConfig) common.IBaseMiddleware
- func NewCorsMiddlewareWithDefaults() common.IBaseMiddleware
- func NewRateLimiterMiddleware(config *RateLimiterConfig) common.IBaseMiddleware
- func NewRateLimiterMiddlewareWithDefaults() common.IBaseMiddleware
- func NewRecoveryMiddleware(config *RecoveryConfig) common.IBaseMiddleware
- func NewRecoveryMiddlewareWithDefaults() common.IBaseMiddleware
- func NewRequestLoggerMiddleware(config *RequestLoggerConfig) common.IBaseMiddleware
- func NewRequestLoggerMiddlewareWithDefaults() common.IBaseMiddleware
- func NewSecurityHeadersMiddleware(config *SecurityHeadersConfig) common.IBaseMiddleware
- func NewSecurityHeadersMiddlewareWithDefaults() common.IBaseMiddleware
- func NewTelemetryMiddleware(config *TelemetryConfig) common.IBaseMiddleware
- func NewTelemetryMiddlewareWithDefaults() common.IBaseMiddleware
- type CorsConfig
- type KeyFunc
- type RateLimiterConfig
- type RecoveryConfig
- type RequestLoggerConfig
- type SecurityHeadersConfig
- type SkipFunc
- type TelemetryConfig
Examples ¶
- Package (CustomCorsConfig)
- Package (CustomRateLimiterConfig)
- Package (CustomRecoveryConfig)
- Package (CustomRequestLoggerConfig)
- Package (CustomSecurityHeadersConfig)
- Package (DisableRequestLogger)
- Package (NewMiddlewareWithDefaults)
- Package (ProductionCorsConfig)
- Package (RateLimiterConfigurations)
- Package (RecoveryWithoutStack)
Constants ¶
const ( OrderRecovery = 0 // panic 恢复中间件(最先执行) OrderRequestLogger = 50 // 请求日志中间件 OrderCORS = 100 // CORS 跨域中间件 OrderSecurityHeaders = 150 // 安全头中间件 OrderRateLimiter = 200 // 限流中间件(认证前执行) OrderTelemetry = 250 // 遥测中间件 OrderAuth = 300 // 认证中间件 )
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 配置
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 TelemetryConfig ¶
TelemetryConfig 遥测配置
func DefaultTelemetryConfig ¶
func DefaultTelemetryConfig() *TelemetryConfig
DefaultTelemetryConfig 默认遥测配置