在 Laravel 中实现请求预处理、权限校验、参数过滤或响应修饰,必须在中间件 handle 方法中定义逻辑:包括基础拦截、用户身份控制、API 密钥验证、请求参数清洗及响应修饰五种方式。

如果您在 Laravel 应用中需要对请求进行预处理、权限校验、参数过滤或响应修饰,则必须在中间件的 handle 方法中明确定义逻辑。以下是实现该目标的多种方法:
一、基础条件拦截逻辑
这是最常用的中间件逻辑形式,适用于简单判断并提前终止请求。核心是依据请求对象属性或辅助服务返回响应,同时确保放行路径存在。
1、打开对应中间件文件,例如 app/Http/Middleware/CheckAge.php。
2、在 handle 方法内编写判断语句,如检查请求中是否携带 age 参数且是否满足阈值:
3、若条件不满足,直接返回重定向响应:return redirect('home');。
4、若条件满足,必须显式调用并返回:return $next($request);。
二、基于用户身份的访问控制逻辑
当需依据认证用户状态(如角色、权限字段)决定是否放行时,应在 handle 方法中安全获取用户信息并执行校验,避免未登录时调用 user() 报错。
1、使用 $request->user() 获取当前认证用户实例。
2、添加空值判断,防止未登录用户触发异常:if (!$request->user() || $request->user()->role !== 'admin')。
3、条件成立时返回禁止响应:return response('Forbidden', 403);。
4、条件不成立时继续传递请求:return $next($request);。
三、API 密钥验证逻辑
面向 API 路由的中间件常需校验请求头中的密钥字段,该逻辑应独立于会话与用户认证,仅依赖 Header 或 Query 参数。
1、从请求头读取密钥:$apiKey = $request->header('X-API-Key');。
2、比对预设密钥值(建议从配置文件读取):if ($apiKey !== config('api.secret'))。
3、校验失败时返回标准 JSON 错误响应:return response()->json(['error' => 'Invalid API key'], 401);。
4、校验通过后放行请求:return $next($request);。
四、请求参数清洗与增强逻辑
中间件可修改传入请求对象,例如统一注入默认参数、过滤敏感字段或标准化数据格式,此类操作需在调用 $next 前完成。
1、使用 $request->merge(['source' => 'api']) 向请求添加新参数。
2、使用 collect($request->input())->except(['token', 'password']) 过滤危险字段。
3、将清洗后的请求对象重新绑定:$request = $request->replace($cleanedInput);。
4、最后仍须返回:return $next($request);。
五、响应修饰逻辑
中间件不仅可处理请求进入阶段,还可对响应对象进行后期加工,例如添加自定义 HTTP 头、修改响应内容类型或记录响应耗时。
1、先执行原始请求链:$response = $next($request);。
2、在返回前设置响应头:$response->headers->set('X-Processed-By', 'Laravel-Middleware');。
3、若需修改响应体(如 JSON),可调用:$response->setContent(json_encode([...], JSON_UNESCAPED_UNICODE));。
4、最终返回修饰后的响应:return $response;。


















