# Braum **Repository Path**: damengde/braum ## Basic Information - **Project Name**: Braum - **Description**: 无纸化内部网关接入 sdk - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-05 - **Last Updated**: 2026-01-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 布隆网关接入 SDK ## 项目简介 本项目“布隆”提供无纸化内部网关的会话透传 SDK,聚焦将网关请求头中的 `X-Session-*` 与可选 `X-Trace-Id` 安全写入 `context`,供下游 handler 直接取值,无需额外配置或 go-zero 依赖。 ## 快速接入 ```bash go get gitee.com/zhejiang-zhijia-information/braum@latest ``` ```go package main import ( "log" "net/http" "gitee.com/zhejiang-zhijia-information/braum/middleware" "gitee.com/zhejiang-zhijia-information/braum/session" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() userID := session.GetUserID(ctx) tenantID := session.GetTenantID(ctx) traceID := session.GetTraceID(ctx) log.Printf("uid=%d tenant=%d trace=%s", userID, tenantID, traceID) w.Write([]byte("ok")) }) mw := middleware.NewSessionContextMiddleware() wrapped := mw.Handle(mux) // 网关转发至 8080,即可在 handler 中读取会话上下文 if err := http.ListenAndServe(":8080", wrapped); err != nil { log.Fatal(err) } } ``` ## 头部规范 - 会话前缀:`X-Session-`,短横线命名;Trace 头:`X-Trace-Id`(可选)。 - 常用字段:`User-Id`、`Tenant-Id`、`Organization-Id`、`Device-Kind`、`Is-Admin`、`Is-Virtual-User`、`Is-Admin-Unit`、`Is-Super-Admin`。 - 多值头仅取首个;整型尝试 `Atoi`,布尔尝试 `ParseBool`,解析失败即忽略。 ## 目录与主要文件 - `constants/constants.go`:头部/上下文键名与字段集合枚举。 - `session/context_helper.go`:上下文取值便捷函数。 - `middleware/session_context_middleware.go`:HTTP 中间件实现。 ## 开发与测试 - Go 版本:1.24.3。 - 单元测试:`go test ./...`,中间件模块覆盖率≥80%。