feat(webui): 请求IP日志记录中间件

- clientIP(): 提取真实客户端IP,优先 X-Forwarded-For(取第一跳) / X-Real-IP,回退 RemoteAddr
- logged(): 最外层中间件,覆盖全部路由,记录方法/路径/IP/认证方式/状态码/耗时
- 认证方式判定: api-key(X-API-Key/Bearer) / session(cookie) / none
- SSE长连接(/chat/events)启动即记,不阻塞等待完成
- statusWriter 捕获响应状态码,支持 Flush/Hijack 透传
- 用于排查'谁调用了什么接口'(如插件禁用等变更操作)
This commit is contained in:
JianFeeeee
2026-08-27 23:04:48 +08:00
parent b902d61bb9
commit 2564e53342
2 changed files with 94 additions and 1 deletions

View File

@ -232,7 +232,9 @@ func (p *Plugin) Start(s *sdk.PluginSDK) error {
p.handler = NewHandler(s)
p.handler.RegisterRoutes(p.mux)
p.server = &http.Server{Addr: addr, Handler: p.mux}
// 最外层套 logged 中间件:记录每个请求的来源 IP / 方法 / 路径 / 认证方式 / 状态码。
// 用于排查“谁调用了什么接口”(如插件禁用等变更操作)。
p.server = &http.Server{Addr: addr, Handler: p.handler.logged(p.mux)}
go func() {
log.Printf("[webui] HTTP server listening on %s", addr)
if err := p.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {