\App\Http\MiddlewareLogDeniedMiddleware

拒绝访问日志中间件

职责:被拒绝访问的统一捕获点——响应为 401(未认证)/403(权限不足)时, 或抛出 HttpResponseException(限流 429)时派发 LogAccessDeniedEvent。 拒绝文案取响应体 message(与统一响应同源);403 时经路由推断目标权限码。 登录失败(api/login 401)由登录表专记,跳过不重复; denied_logged 标记保证业务拦截点已发事件时不再重复落库; 其余状态码(200/400/404/422/500…)不记录。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 请求处理 handle 分区 2 · 内部辅助 dispatchIfNeeded / responseReason └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
handle()
No public properties found
No constants found
No protected methods found
No protected properties found
N/A
dispatchIfNeeded()
responseReason()
No private properties found
N/A

Methods

handle()

handle(\Illuminate\Http\Request  $request, \Closure  $next) : mixed

处理请求:捕获限流异常 → 放行 → 检查拒绝响应 → 派发审计事件。

流程:① 捕获 HttpResponseException(限流 429,异常渲染不经响应回程)派发后原样重抛 ② 放行取响应 ③ 401/403 且未打去重标记 → 派发(登录失败路径跳过)

Parameters

\Illuminate\Http\Request $request
\Closure $next

Returns

mixed —

dispatchIfNeeded()

dispatchIfNeeded(\Illuminate\Http\Request  $request, int  $denyType, ?\Symfony\Component\HttpFoundation\Response  $response) : void

去重判定后派发审计事件。

跳过:已打 denied_logged 标记(业务拦截点已发事件);登录失败路径 (api/login 401 已由登录表专记)。写库失败由监听器兜底,此处仅派发。

Parameters

\Illuminate\Http\Request $request
int $denyType
?\Symfony\Component\HttpFoundation\Response $response

responseReason()

responseReason(?\Symfony\Component\HttpFoundation\Response  $response) : string

拒绝文案:取统一响应体 message(与 ApiResponse 同源),非 JSON 响应留空

Parameters

?\Symfony\Component\HttpFoundation\Response $response

Returns

string —