Documentation
¶
Index ¶
- Constants
- Variables
- func APIRateLimit() gin.HandlerFunc
- func APIRedisRateLimit() gin.HandlerFunc
- func AdminRequired() gin.HandlerFunc
- func AnyUserRequired() gin.HandlerFunc
- func AuthRequired() gin.HandlerFunc
- func CORS() gin.HandlerFunc
- func CORSForAPI() gin.HandlerFunc
- func CORSWithConfig(corsCfg *config.CORSConfig) gin.HandlerFunc
- func CORSWithOrigins(origins []string) gin.HandlerFunc
- func CORSWithWildcard() gin.HandlerFunc
- func CSRF(config ...CSRFConfig) gin.HandlerFunc
- func CSRFExempt() gin.HandlerFunc
- func CSRFForAPI() gin.HandlerFunc
- func CSRFToken(c *gin.Context)
- func CSRFWithExempt(config ...CSRFConfig) gin.HandlerFunc
- func CSRFWithSkip(skipPaths []string) gin.HandlerFunc
- func CustomRateLimit(rate int, window time.Duration) gin.HandlerFunc
- func CustomRedisRateLimit(keyPrefix string, rate int, window time.Duration) gin.HandlerFunc
- func DoubleSubmitCookie() gin.HandlerFunc
- func GenerateAPIToken(c *gin.Context)
- func GetCSRFToken(c *gin.Context) string
- func GetRequestID(c *gin.Context) string
- func GetRole(c *gin.Context) string
- func GetUserID(c *gin.Context) uint
- func GetUserType(c *gin.Context) string
- func GetUsername(c *gin.Context) string
- func InitRateLimiters()
- func Logger() gin.HandlerFunc
- func LoggerForAPI() gin.HandlerFunc
- func LoggerForDebug() gin.HandlerFunc
- func LoggerMinimal() gin.HandlerFunc
- func LoggerWithConfig(cfg LoggerConfig) gin.HandlerFunc
- func LoginRateLimit() gin.HandlerFunc
- func LoginRedisRateLimit() gin.HandlerFunc
- func RateLimit(limiter *RateLimiter) gin.HandlerFunc
- func Recover() gin.HandlerFunc
- func RecoverWithDetail() gin.HandlerFunc
- func RedisRateLimit(keyPrefix string, rate int) gin.HandlerFunc
- func RedisRateLimitWithIdentifier(keyPrefix string, rate int, identifierFunc func(c *gin.Context) string) gin.HandlerFunc
- func RequestID() gin.HandlerFunc
- func RequireAuth(checker AuthChecker, messages ...string) gin.HandlerFunc
- func RequireRoles(roles ...string) gin.HandlerFunc
- func RequireUserTypes(userTypes ...string) gin.HandlerFunc
- func StaffRequired() gin.HandlerFunc
- func StopRateLimiters()
- func SuperAdminRequired() gin.HandlerFunc
- func UploadRateLimit() gin.HandlerFunc
- func UploadRedisRateLimit() gin.HandlerFunc
- type AuthChecker
- type AuthUser
- type CSRFConfig
- type LoggerConfig
- type RateLimiter
- type RedisRateLimiter
Constants ¶
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" )
const ( // CSRFTokenLength CSRF Token 长度 CSRFTokenLength = 32 // CSRFHeaderName CSRF Header 名称 CSRFHeaderName = "X-CSRF-Token" // CSRFCookieName CSRF Cookie 名称 CSRFCookieName = "csrf_token" // CSRFFormField 表单字段名称 CSRFFormField = "_csrf" )
Variables ¶
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 配置
var DefaultLoggerConfig = LoggerConfig{ LogRequestBody: false, LogResponseBody: false, MaxBodyLength: 1024, SkipPaths: []string{"/health", "/swagger"}, SkipPathPrefixes: []string{"/public", "/static"}, SlowRequestThreshold: 500 * time.Millisecond, }
DefaultLoggerConfig 默认日志配置
Functions ¶
func AnyUserRequired ¶
func AnyUserRequired() gin.HandlerFunc
AnyUserRequired 任意用户权限中间件(默认允许 admin/super_admin/staff)
func CORS ¶
func CORS() gin.HandlerFunc
CORS 跨域中间件 支持从配置文件读取 CORS 配置;遵循 W3C CORS 规范: 当 AllowCredentials=true 时,Access-Control-Allow-Origin 必须回显为具体 Origin, 不能使用 "*"(浏览器会拒绝携带凭证的响应)。
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 CSRFForAPI ¶
func CSRFForAPI() gin.HandlerFunc
CSRFForAPI 适用于 API 的 CSRF 中间件(不使用 Cookie) 客户端需要先调用 /csrf-token 获取 Token
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 ¶
CustomRedisRateLimit 自定义 Redis 分布式限流
func DoubleSubmitCookie ¶
func DoubleSubmitCookie() gin.HandlerFunc
DoubleSubmitCookie 双重提交 Cookie 模式(无需服务器存储) 适用于无状态 API
func GenerateAPIToken ¶
GenerateAPIToken 生成 API CSRF Token(用于 API 模式)
func LoggerWithConfig ¶
func LoggerWithConfig(cfg LoggerConfig) gin.HandlerFunc
LoggerWithConfig 使用自定义配置的日志中间件
func LoginRedisRateLimit ¶
func LoginRedisRateLimit() gin.HandlerFunc
LoginRedisRateLimit 登录接口 Redis 分布式限流
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 RequireAuth ¶
func RequireAuth(checker AuthChecker, messages ...string) gin.HandlerFunc
RequireAuth 自定义权限中间件
func RequireUserTypes ¶
func RequireUserTypes(userTypes ...string) gin.HandlerFunc
RequireUserTypes 用户类型权限中间件
func UploadRedisRateLimit ¶
func UploadRedisRateLimit() gin.HandlerFunc
UploadRedisRateLimit 上传接口 Redis 分布式限流
Types ¶
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 创建速率限制器(内存版)
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 分布式限流器