taolib.testing.audit.middleware#

FastAPI 审计日志中间件。

自动记录所有 API 请求的审计日志。

Attributes#

Classes#

AuditMiddleware

FastAPI 审计日志中间件。

Functions#

extract_client_ip(→ str)

提取客户端 IP 地址。

extract_user_id(→ str | None)

尝试从请求中提取用户 ID。

filter_headers(→ dict[str, str])

过滤敏感请求头。

Module Contents#

taolib.testing.audit.middleware.logger#
taolib.testing.audit.middleware.DEFAULT_EXCLUDE_PATHS#
taolib.testing.audit.middleware.SENSITIVE_HEADERS#
taolib.testing.audit.middleware.extract_client_ip(request: fastapi.Request) str#

提取客户端 IP 地址。

优先级: 1. X-Forwarded-For 第一个 IP(代理场景) 2. X-Real-IP 3. request.client.host(直接连接)

参数:

request -- FastAPI 请求对象

返回:

客户端 IP 地址

taolib.testing.audit.middleware.extract_user_id(request: fastapi.Request) str | None#

尝试从请求中提取用户 ID。

从 request.state.user 或自定义头 X-User-ID 提取。

参数:

request -- FastAPI 请求对象

返回:

用户 ID 或 None

taolib.testing.audit.middleware.filter_headers(headers: dict[str, str]) dict[str, str]#

过滤敏感请求头。

参数:

headers -- 原始请求头

返回:

过滤后的请求头

class taolib.testing.audit.middleware.AuditMiddleware(app: Any, audit_logger: taolib.testing.audit.logger.AuditLogger, exclude_paths: set[str] | None = None, include_request_body: bool = False, include_response_body: bool = False, sensitive_body_paths: set[str] | None = None)#

Bases: starlette.middleware.base.BaseHTTPMiddleware

FastAPI 审计日志中间件。

自动记录所有 API 请求的审计日志,包括: - 请求方法和路径 - 客户端 IP 和 User-Agent - 用户 ID(如果已认证) - 响应状态码和响应时间

参数:
  • app -- ASGI 应用

  • audit_logger -- 审计日志记录器

  • exclude_paths -- 排除的路径前缀集合

  • include_request_body -- 是否记录请求体

  • include_response_body -- 是否记录响应体

  • sensitive_body_paths -- 包含敏感数据的路径前缀集合

_audit_logger#
_exclude_paths#
_include_request_body = False#
_include_response_body = False#
_sensitive_body_paths#
_should_skip(path: str) bool#

检查路径是否应跳过审计。

参数:

path -- 请求路径

返回:

是否跳过

_is_sensitive_path(path: str) bool#

检查路径是否包含敏感数据。

参数:

path -- 请求路径

返回:

是否敏感

async dispatch(request: fastapi.Request, call_next: Any) fastapi.Response#

处理请求并记录审计日志。

参数:
  • request -- 接收的请求

  • call_next -- 下一个处理函数

返回:

响应对象

_determine_action(method: str, path: str) taolib.testing.audit.models.AuditAction#

根据请求方法和路径确定操作类型。

参数:
  • method -- HTTP 方法

  • path -- 请求路径

返回:

操作类型