我可以把后置中间件放到前置中间件的前面吗?
TencentEncryptEncode 中间件要加密所有 response,其他前置中间件可能会抛出异常,异常类 return response,如果把 TencentEncryptEncode 放到前面,其他前置中间件的 response 加密不了
Route::middleware([
//加密(后置中间件)
TencentEncryptEncode::class,
//TencentSimulateRequest::class,
//解密
TencentEncryptDecode::class,
//校验appkey
CheckAppkey::class,
//验证签名
TencentSign::class,
])->group(function () {
//接口
})
//验证签名中间件 - 前置
class TencentSign
{
public function handle(Request $request, Closure $next)
{
$result = Sign::verify('/'.$request->path(), $request->except('ciphertext'));
if ($result === false) {
throw new SignException();
}
return $next($request);
}
}
//异常类
class SignException extends Exception
{
/**
* 报告异常。
*
* @return bool|null
*/
public function report()
{
}
/**
* 渲染异常为 HTTP 响应。
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function render($request)
{
return response([
'status' => 1001,
'message' => '签名错误',
]);
}
}
推荐文章: