middleware

package
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Jun 22, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// ContextKeyUserID 用户ID上下文键
	ContextKeyUserID = "user_id"
	// ContextKeyUsername 用户名上下文键
	ContextKeyUsername = "username"
	// ContextKeyRole 角色上下文键
	ContextKeyRole = "role"
	// ContextKeyUserType 用户类型上下文键
	ContextKeyUserType = "user_type"

	// DefaultUserTypeSuperAdmin 默认超级管理员用户类型
	DefaultUserTypeSuperAdmin = "super_admin"
	// DefaultUserTypeAdmin 默认管理员用户类型
	DefaultUserTypeAdmin = "admin"
	// DefaultUserTypeStaff 默认员工用户类型
	DefaultUserTypeStaff = "staff"
)
View Source
const (
	// CSRFTokenLength CSRF Token 长度
	CSRFTokenLength = 32
	// CSRFHeaderName CSRF Header 名称
	CSRFHeaderName = "X-CSRF-Token"
	// CSRFCookieName CSRF Cookie 名称
	CSRFCookieName = "csrf_token"
	// CSRFFormField 表单字段名称
	CSRFFormField = "_csrf"
)

Variables

View Source
var DefaultCSRFConfig = CSRFConfig{
	TokenLength: CSRFTokenLength,
	HeaderName:  CSRFHeaderName,
	CookieName:  CSRFCookieName,
	FormField:   CSRFFormField,
	Secure:      false,
	HTTPOnly:    true,
	SameSite:    http.SameSiteLaxMode,
	Path:        "/",
	MaxAge:      3600,
	ErrorFunc:   defaultCSRFError,
	SkipFunc:    nil,
}

DefaultCSRFConfig 默认 CSRF 配置

View Source
var DefaultLoggerConfig = LoggerConfig{
	LogRequestBody:       false,
	LogResponseBody:      false,
	MaxBodyLength:        1024,
	SkipPaths:            []string{"/health", "/swagger"},
	SkipPathPrefixes:     []string{"/public", "/static"},
	SlowRequestThreshold: 500 * time.Millisecond,
}

DefaultLoggerConfig 默认日志配置

Functions

func APIRateLimit

func APIRateLimit() gin.HandlerFunc

APIRateLimit 普通 API 速率限制

func APIRedisRateLimit

func APIRedisRateLimit() gin.HandlerFunc

APIRedisRateLimit API Redis 分布式限流

func AdminRequired

func AdminRequired() gin.HandlerFunc

AdminRequired 管理员权限中间件

func AnyUserRequired

func AnyUserRequired() gin.HandlerFunc

AnyUserRequired 任意用户权限中间件(默认允许 admin/super_admin/staff)

func AuthRequired

func AuthRequired() gin.HandlerFunc

AuthRequired JWT 认证中间件

func CORS

func CORS() gin.HandlerFunc

CORS 跨域中间件 支持从配置文件读取 CORS 配置;遵循 W3C CORS 规范: 当 AllowCredentials=true 时,Access-Control-Allow-Origin 必须回显为具体 Origin, 不能使用 "*"(浏览器会拒绝携带凭证的响应)。

func CORSForAPI

func CORSForAPI() gin.HandlerFunc

CORSForAPI 适用于 API 的 CORS 中间件

func CORSWithConfig

func CORSWithConfig(corsCfg *config.CORSConfig) gin.HandlerFunc

CORSWithConfig 使用自定义配置的 CORS 中间件

func CORSWithOrigins

func CORSWithOrigins(origins []string) gin.HandlerFunc

CORSWithOrigins 使用指定域名列表的 CORS 中间件

func CORSWithWildcard

func CORSWithWildcard() gin.HandlerFunc

CORSWithWildcard 允许所有来源的 CORS 中间件(仅用于开发环境) 注意:生产环境不建议使用

func CSRF

func CSRF(config ...CSRFConfig) gin.HandlerFunc

CSRF 创建 CSRF 中间件

func CSRFExempt

func CSRFExempt() gin.HandlerFunc

CSRFExempt 标记路由不需要 CSRF 保护 使用方法:在路由组上使用此中间件

func CSRFForAPI

func CSRFForAPI() gin.HandlerFunc

CSRFForAPI 适用于 API 的 CSRF 中间件(不使用 Cookie) 客户端需要先调用 /csrf-token 获取 Token

func CSRFToken

func CSRFToken(c *gin.Context)

CSRFToken 返回 CSRF Token 的处理器(用于 API 模式)

func CSRFWithExempt

func CSRFWithExempt(config ...CSRFConfig) gin.HandlerFunc

CSRFWithExempt 支持 exempt 标记的 CSRF 中间件

func CSRFWithSkip

func CSRFWithSkip(skipPaths []string) gin.HandlerFunc

CSRFWithSkip 跳过指定路径的 CSRF 检查

func CustomRateLimit

func CustomRateLimit(rate int, window time.Duration) gin.HandlerFunc

CustomRateLimit 自定义速率限制(内存版)

func CustomRedisRateLimit

func CustomRedisRateLimit(keyPrefix string, rate int, window time.Duration) gin.HandlerFunc

CustomRedisRateLimit 自定义 Redis 分布式限流

func DoubleSubmitCookie

func DoubleSubmitCookie() gin.HandlerFunc

DoubleSubmitCookie 双重提交 Cookie 模式(无需服务器存储) 适用于无状态 API

func GenerateAPIToken

func GenerateAPIToken(c *gin.Context)

GenerateAPIToken 生成 API CSRF Token(用于 API 模式)

func GetCSRFToken

func GetCSRFToken(c *gin.Context) string

GetCSRFToken 从上下文获取 CSRF Token

func GetRequestID

func GetRequestID(c *gin.Context) string

GetRequestID 从上下文获取请求ID

func GetRole

func GetRole(c *gin.Context) string

GetRole 从上下文获取角色

func GetUserID

func GetUserID(c *gin.Context) uint

GetUserID 从上下文获取用户ID

func GetUserType

func GetUserType(c *gin.Context) string

GetUserType 从上下文获取用户类型

func GetUsername

func GetUsername(c *gin.Context) string

GetUsername 从上下文获取用户名

func InitRateLimiters

func InitRateLimiters()

InitRateLimiters 初始化限速器

func Logger

func Logger() gin.HandlerFunc

Logger 日志中间件(使用默认配置)

func LoggerForAPI

func LoggerForAPI() gin.HandlerFunc

LoggerForAPI API 专用日志中间件(更详细)

func LoggerForDebug

func LoggerForDebug() gin.HandlerFunc

LoggerForDebug 调试专用日志中间件(最详细)

func LoggerMinimal

func LoggerMinimal() gin.HandlerFunc

LoggerMinimal 最简日志中间件(只记录基本信息)

func LoggerWithConfig

func LoggerWithConfig(cfg LoggerConfig) gin.HandlerFunc

LoggerWithConfig 使用自定义配置的日志中间件

func LoginRateLimit

func LoginRateLimit() gin.HandlerFunc

LoginRateLimit 登录接口速率限制

func LoginRedisRateLimit

func LoginRedisRateLimit() gin.HandlerFunc

LoginRedisRateLimit 登录接口 Redis 分布式限流

func RateLimit

func RateLimit(limiter *RateLimiter) gin.HandlerFunc

RateLimit 通用速率限制中间件(内存版)

func Recover

func Recover() gin.HandlerFunc

Recover panic恢复中间件,捕获panic并返回统一错误响应

func RecoverWithDetail

func RecoverWithDetail() gin.HandlerFunc

RecoverWithDetail panic恢复中间件(详细版本,返回更多信息) 注意: 生产环境不应使用,会暴露敏感信息

func RedisRateLimit

func RedisRateLimit(keyPrefix string, rate int) gin.HandlerFunc

RedisRateLimit Redis 分布式限流中间件 参数: keyPrefix 键名前缀(如 "login_limit"),rate 每分钟请求数

func RedisRateLimitWithIdentifier

func RedisRateLimitWithIdentifier(keyPrefix string, rate int, identifierFunc func(c *gin.Context) string) gin.HandlerFunc

RedisRateLimitWithIdentifier 自定义标识的 Redis 分布式限流 参数: keyPrefix 键名前缀,rate 每分钟请求数,identifierFunc 标识获取函数

func RequestID

func RequestID() gin.HandlerFunc

RequestID 请求ID中间件,为每个请求生成唯一ID便于追踪

func RequireAuth

func RequireAuth(checker AuthChecker, messages ...string) gin.HandlerFunc

RequireAuth 自定义权限中间件

func RequireRoles

func RequireRoles(roles ...string) gin.HandlerFunc

RequireRoles 角色权限中间件

func RequireUserTypes

func RequireUserTypes(userTypes ...string) gin.HandlerFunc

RequireUserTypes 用户类型权限中间件

func StaffRequired

func StaffRequired() gin.HandlerFunc

StaffRequired 员工权限中间件

func StopRateLimiters

func StopRateLimiters()

StopRateLimiters 停止所有限速器(应用关闭时调用)

func SuperAdminRequired

func SuperAdminRequired() gin.HandlerFunc

SuperAdminRequired 超级管理员权限中间件

func UploadRateLimit

func UploadRateLimit() gin.HandlerFunc

UploadRateLimit 上传接口速率限制

func UploadRedisRateLimit

func UploadRedisRateLimit() gin.HandlerFunc

UploadRedisRateLimit 上传接口 Redis 分布式限流

Types

type AuthChecker

type AuthChecker func(user AuthUser, c *gin.Context) bool

AuthChecker 自定义权限检查函数

type AuthUser

type AuthUser struct {
	UserID   uint
	Username string
	Role     string
	UserType string
}

AuthUser 当前认证用户

func GetAuthUser

func GetAuthUser(c *gin.Context) (AuthUser, bool)

GetAuthUser 从上下文获取认证用户

type CSRFConfig

type CSRFConfig struct {
	// TokenLength Token 长度
	TokenLength int
	// HeaderName Header 名称
	HeaderName string
	// CookieName Cookie 名称
	CookieName string
	// FormField 表单字段名
	FormField string
	// Secure Cookie 是否启用 Secure
	Secure bool
	// HTTPOnly Cookie 是否启用 HttpOnly
	HTTPOnly bool
	// SameSite Cookie SameSite 属性
	SameSite http.SameSite
	// Domain Cookie 域名
	Domain string
	// Path Cookie 路径
	Path string
	// MaxAge Cookie 有效期(秒)
	MaxAge int
	// ErrorFunc 错误处理函数
	ErrorFunc func(c *gin.Context)
	// SkipFunc 跳过检查函数
	SkipFunc func(c *gin.Context) bool
}

CSRFConfig CSRF 配置

type LoggerConfig

type LoggerConfig struct {
	// LogRequestBody 是否记录请求体
	LogRequestBody bool
	// LogResponseBody 是否记录响应体
	LogResponseBody bool
	// MaxBodyLength 最大记录的请求/响应体长度(字节)
	MaxBodyLength int
	// SkipPaths 不记录日志的路径
	SkipPaths []string
	// SkipPathPrefixes 不记录日志的路径前缀
	SkipPathPrefixes []string
	// SlowRequestThreshold 慢请求阈值(超过此时间记录警告)
	SlowRequestThreshold time.Duration
}

LoggerConfig 日志中间件配置

type RateLimiter

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

RateLimiter 速率限制器(内存版,单实例使用)

func NewRateLimiter

func NewRateLimiter(rate int, window time.Duration) *RateLimiter

NewRateLimiter 创建速率限制器(内存版)

func (*RateLimiter) Allow

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

Allow 检查是否允许请求

func (*RateLimiter) Stop

func (rl *RateLimiter) Stop()

Stop 停止限流器(释放资源)

type RedisRateLimiter

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

RedisRateLimiter Redis 分布式限流器

func NewRedisRateLimiter

func NewRedisRateLimiter(keyPrefix string, rate int, window time.Duration) *RedisRateLimiter

NewRedisRateLimiter 创建 Redis 分布式限流器

func (*RedisRateLimiter) Allow

func (rl *RedisRateLimiter) Allow(ctx context.Context, identifier string) (bool, error)

Allow 检查是否允许请求

func (*RedisRateLimiter) GetCount

func (rl *RedisRateLimiter) GetCount(ctx context.Context, identifier string) (int64, error)

GetCount 获取当前窗口内的请求数

func (*RedisRateLimiter) Reset

func (rl *RedisRateLimiter) Reset(ctx context.Context, identifier string) error

Reset 重置限流计数

Jump to

Keyboard shortcuts

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