3636from apps .exceptions import AppBaseException
3737
3838from apps .utils .local import activate_request
39+ from apigw_manager .apigw .authentication import ApiGatewayJWTUserMiddleware
3940
4041
4142class AccessorSignal (Signal ):
@@ -163,7 +164,10 @@ def process_exception(self, request, exception):
163164 # 处理 Data APP 自定义异常
164165 if isinstance (exception , AppBaseException ):
165166 _msg = _ ("【APP 自定义异常】{message}, code={code}, args={args}" ).format (
166- message = exception .message , code = exception .code , args = exception .args , data = exception .data ,
167+ message = exception .message ,
168+ code = exception .code ,
169+ args = exception .args ,
170+ data = exception .data ,
167171 )
168172 logger .exception (_msg )
169173 return JsonResponse (
@@ -174,7 +178,12 @@ def process_exception(self, request, exception):
174178 if isinstance (exception , BlueException ):
175179 logger .exception (
176180 ("""捕获主动抛出异常, 具体异常堆栈->[%s] status_code->[%s] & """ """client_message->[%s] & args->[%s] """ )
177- % (traceback .format_exc (), exception .error_code , exception .message , exception .args ,)
181+ % (
182+ traceback .format_exc (),
183+ exception .error_code ,
184+ exception .message ,
185+ exception .args ,
186+ )
178187 )
179188
180189 response = JsonResponse (
@@ -204,3 +213,21 @@ def process_exception(self, request, exception):
204213 response .status_code = 500
205214
206215 return response
216+
217+
218+ class ApiGatewayJWTUserInjectAppMiddleware (ApiGatewayJWTUserMiddleware ):
219+ def __call__ (self , request ):
220+ logger .info (f"requestapigw: { request .user .username } , { request .user } " )
221+ # jwt_app 依赖于 ApiGatewayJWTAppMiddleware 注入
222+ jwt_app = getattr (request , "app" , None )
223+ if not jwt_app :
224+ return super ().__call__ (request )
225+
226+ # 和开发框架保持一致行为,如果通过应用认证并且开启 ESB 白名单,此时认为用户认证也通过
227+ use_esb_white_list = getattr (settings , "USE_ESB_WHITE_LIST" , True )
228+ if use_esb_white_list and jwt_app .verified :
229+ # 如果 user 信息不存在,默认填充 bk_app_code 作为用户名
230+ request .jwt .payload ["user" ] = request .jwt .payload .get ("user" ) or {"bk_username" : jwt_app .bk_app_code }
231+ request .jwt .payload ["user" ]["verified" ] = True
232+
233+ return super ().__call__ (request )
0 commit comments