96SEO 2026-08-13 11:03 1
Go | 中间件 | chi | 多租户 | SaaS
多租户 SaaS 的请求处理比单租户复杂得多:JWT 认证、RBAC 权限、租户隔离、配额检查、审计日志…,

龙讯 POS V2 用 14 个中间件组成请求处理流水线。这篇文章拆解每个中间件的实现,并聚焦使用者在实际开发中的痛点。
在多租户程序中。每个业务场景都需要特定的权限和配额校验,如果不把这些逻辑拆分为独立中间件,代码会变得臃肿难懂。将功能拆分成可复用的中间件可以让团队成员快速定位问题并复用已有组件。
高并发情况下全局限流与租户级限流必须,否则会成为程序吞吐量的瓶颈。使用 Redis INCR 并结合滑动窗口算法,可以在毫秒级完成限流判断。
SaaS 环境要求严格记录操作日志,特别是写操作。脱敏与异步写入能满足合规需求,同时降低对业务链路的影响。
Request → RealIP . 获取真实IP
→ Recoverer . Panic恢复
→ Logger . 请求日志
→ Metrics . Promeus指标
→ CORS . 跨域处理
→ SecurityHeaders . 安全头
→ MaxBodySize . 请求体大小限制
→ RateLimit . 全局限流
→ JWTAuth . JWT 认证
→ RBAC . 角色权限检查
→ TenantMiddleware . 租户上下文注入
→ AuditMiddleware . 审计日志记录
→ QuotaCheck . 配额检查
→ TenantRateLimit . 租户级限流
→ Handler . 业务处理
func JWTAuth func http.Handler {
return func http.Handler {
return http.HandlerFunc {
authHeader := r.Header.Get
if authHeader == "" ||!strings.HasPrefix {
writeUnauthorized
return
}
tokenStr := authHeader
claims,err := parseToken
if err!= nil {
writeUnauthorized
return
}
// 检查 Token 黑名单
blacklistKey := fmt.Sprintf
exists,_ := rdb.Exists,blacklistKey).Result
if exists> 0 {
writeUnauthorized
return
}
// 注入上下文
ctx := context.WithValue,claimsKey,claims)
next.ServeHTTP)
})
}
}
func RequireRole func http.Handler {
roleSet := make
for _。r := range roles { roleSet = true }
return func http.Handler {
return http.HandlerFunc {
claims := GetClaims
if roleSet {
next.ServeHTTP
return
}
writeForbidden
})
}
}
// 四级角色继承
func RequirePlatformAdmin func http.Handler { return RequireRole }
func RequireMerchantAdmin func http.Handler {
return RequireRole
}
func RequireStoreAdmin func http.Handler {
return RequireRole
}
func RequireStaff func http.Handler {
return RequireRole
}
func TenantMiddleware http.Handler {
return http.HandlerFunc {
claims := GetClaims
// 检查商户状态
tenant := tenantRepo.FindByID
if tenant == nil {
writeForbidden
return
}
if tenant.Status == "frozen" || tenant.Status == "closed"{
writeJSON(w,nil,model.Error)
return
}
// 注入租户ID和门店ID到上下文
至于ctx,=context.WithValue,tenantIDKey,int64)
ctx=context.WithValue)
ctx=context.WithValue)
next.ServeHTTP)
})
}
func QuotaCheck funchttp.handler{
...
switch resource{
case "store":
var count int64;db.Model.Where.Count;if count>=tenant.MaxStores{writeJSON;return}
case "dish":
...
case "order":
today的观点是,=time.Now.Format
db.Model.Where=?",tid,today).Count;
怎么说呢,if count>=tenant.MaxOrdersPerDay{writeJSON;话说回来,return}
}
next.ServeHTTP
}
func AuditMiddleware funchttp.handler{
...
至于body。_,=io.ReadAll;r.Body=io.NopCloser)//重新放回
sanitized:=sanitizeAuditData)
beforeData:=r.Context.Value
go auditSvc.Log,claims.TenantID,claims.UserID,r.Method,r.URL.Path,/*recordId*/0,beforeData,sanitized,extractClientIP,)
next.ServeHTTP
}
// 全局限流
func RateLimit funchttp.handler{
...
}
// 租户级限流
func TenantRateLimit funchttp.handler{
...
}
// router.go — 中间件与路由组合
// 公共路由
r.Group{
router.Use) //仅全局限流
router.Post
router.Post
})
// 已鉴权路由
r.Group{
router.Use)
router.Use)
router.Use
// store_admin+ 可访问区域
router.Group{
s.Use)
s.Get
s.Post
})
// merchant_admin+ 可访问区域
router.Group{
m.Use)
m.Use)
m.Post
m.Use)
})
// platform_admin 区域
router.Group{
p.Use)
p.Get
p.Get
})
})
| 中间件 | 职责 | 关键技术 |
|---|---|---|
| 14 个独立职责,中介化设计,让业务代码保持干净且易维护。 | ||
| ① JWTAuth ② RBAC ③ TenantMiddleware ④ QuotaCheck ⑤ AuditMiddleware ⑥ RateLimit ⑦ TenantRateLimit | ① 身份验证 ② 授权检查 ③ 租户状态校验 + 上下文注入 ④ 配额数据库计数 + 套餐限制 ⑤ 写操作脱敏 + 异步写入哈希链 ⑥ 全局 IP 限速 ⑦ 租户 ID 限速 | |
| 💡 使用者痛点:单一文件管理所有权限导致维护成本高。通过拆分为独立可复用组件,快速定位问题。💬 对应场景:增加功能时只需追加一个新 middleware。 | ||
| 💡 使用者痛点:频繁触发全局或租戶級限速导致业务卡顿。采用 Redis INCR 与滑动窗口算法,延迟 <1ms,保证吞吐量。💬 对应场景:高峰期大规模并发调用。 | ||
| 💡 使用者痛点:审计数据泄露风险。脱敏+异步写入保证合规且不阻塞业务。💬 对应场景:金融、电商后台需要完整操作轨迹。 | ||
Use 调用;TenantMiddleware 提供统一的租戶上下文,为后续配额/审计等做准备;context 携带 Claims 与 Tenant 信息。实现跨路由共享,14 个中间件。各司其职,组合成完整的请求处理流水线.
。作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback