我可以把后置中间件放到前置中间件的前面吗?

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' => '签名错误',
        ]);
    }
}
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

我不明白 中间件不是 你放后面就是后置 放前面就是前置吗

1周前 评论
勇敢的心 (楼主) 1周前
Smilephp (作者) 1周前
勇敢的心 (楼主) 1周前
nfangxu

中间件的顺序只是洋葱的层的顺序 他可以是前置的也可以是后置的 通常会按职能划分来处理层的顺序 职能覆盖面越大的 他所在的层越靠外

1周前 评论

前置中间件报错的话,走不到后置中间件吧

1周前 评论
勇敢的心 (楼主) 1周前
zhaojjiang (作者) 1周前
勇敢的心 (楼主) 1周前
zhaojjiang (作者) 1周前

其他中间件会抛异常的或者返回的,需要统一的做一次拦截,再把数据加密返回。 就是加密的不止中间件,还有异常的抛出的数据也要做拦截加密。然后有直接返回的数据,那也做一个加密的类,返回的时候用这个响应类

1周前 评论
勇敢的心 (楼主) 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!