diff --git a/ruoyi-fastapi-backend/middlewares/context_middleware.py b/ruoyi-fastapi-backend/middlewares/context_middleware.py new file mode 100644 index 0000000..89c9054 --- /dev/null +++ b/ruoyi-fastapi-backend/middlewares/context_middleware.py @@ -0,0 +1,29 @@ +from fastapi import FastAPI, Request +from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint +from starlette.responses import Response + +from common.context import RequestContext + + +class ContextCleanupMiddleware(BaseHTTPMiddleware): + """ + 上下文清理中间件 + """ + + async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response: + """ + 在每个请求处理完成后清理上下文信息 + """ + response = await call_next(request) + # 请求处理完成后清理所有上下文变量 + RequestContext.clear_all() + return response + + +def add_context_cleanup_middleware(app: FastAPI) -> None: + """ + 添加上下文清理中间件 + + :param app: FastAPI对象 + """ + app.add_middleware(ContextCleanupMiddleware) diff --git a/ruoyi-fastapi-backend/middlewares/handle.py b/ruoyi-fastapi-backend/middlewares/handle.py index bc2aca9..235bc6a 100644 --- a/ruoyi-fastapi-backend/middlewares/handle.py +++ b/ruoyi-fastapi-backend/middlewares/handle.py @@ -1,5 +1,6 @@ from fastapi import FastAPI +from middlewares.context_middleware import add_context_cleanup_middleware from middlewares.cors_middleware import add_cors_middleware from middlewares.gzip_middleware import add_gzip_middleware from middlewares.trace_middleware import add_trace_middleware @@ -9,6 +10,8 @@ def handle_middleware(app: FastAPI) -> None: """ 全局中间件处理 """ + # 加载上下文清理中间件 + add_context_cleanup_middleware(app) # 加载跨域中间件 add_cors_middleware(app) # 加载gzip压缩中间件