Iris中给单个路由加中间件需将中间件置于handler之前,如app.Get("/admin", authMiddleware, adminHandler);路由组用Party初始化或.Use挂载;MVC Controller需通过AfterActivation修改Handlers切片插入中间件。

给单个路由加中间件:用 app.Get 等方法的参数传入
最直接的方式是把中间件作为处理器链的一部分,跟在路由路径后面传进去。Iris 的 Get、Post 等方法支持可变参数,最后一个参数才是实际 handler,前面的都是中间件。
常见错误是把中间件和 handler 写反顺序,或者漏掉 c.Next() 导致后续 handler 不执行。
-
app.Get("/admin", authMiddleware, adminHandler)—— 正确:中间件在前,handler 在后 -
app.Get("/admin", adminHandler, authMiddleware)—— 错误:handler 被当成了中间件,c.Next()不会调用它 - 中间件函数里必须显式调用
c.Next(),否则请求会卡住,不会走到下一个 handler
给路由组(Party)加中间件:用 app.Party 第二个参数或 .Use
当你有一批路径共用同一套前置逻辑(比如 /api/v1/ 下所有接口都要鉴权),用 Party 是更清晰的做法。中间件可以写在 Party 初始化时,也可以单独调用 .Use 挂载。
注意:Party 创建后挂载的中间件,只对这个子路由下的注册路径生效,不影响根路由或其他 Party。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
apiV1 := app.Party("/api/v1", authMiddleware)—— 初始化时绑定,简洁常用 -
admin := app.Party("/admin"); admin.Use(logMiddleware); admin.Get("/stats", statsHandler)—— 后续追加,适合动态组合 - 如果同时用了初始化参数和
.Use,它们会按注册顺序依次执行,即初始化参数里的中间件先于.Use添加的
给 MVC Controller 中特定方法加中间件:靠 BeforeActivation 和 AfterActivation
MVC 模式下,Controller 方法默认不暴露为路由,而是由框架自动映射(如 GetLogin → GET /login)。要给其中某个方法单独加中间件,不能直接改方法签名,得用激活钩子。
关键点在于:你得先拿到对应路由的索引,再往它的 Handlers 切片里插入中间件——而且位置很重要,插在开头才起作用。
- 在 Controller 里实现
AfterActivation(a mvc.AfterActivation)方法 - 用
a.GetRoute("GetLogin")获取目标路由对象 - 修改其
Handlers:例如index.Handlers = append([]iris.Handler{authMiddleware}, index.Handlers...) - 别忘了中间件里仍需
c.Next(),否则 Controller 方法不会被调用
中间件执行顺序和常见陷阱
Iris 的中间件执行是链式调用,但不是“全链统一入口”,而是按注册层级叠加。全局 app.Use、Party .Use、单路由参数三者嵌套时,顺序容易搞混。
最容易被忽略的是:中间件函数签名必须是 func(iris.Context),且内部没调用 c.Next() 就等于中断了整条链。
- 全局中间件最先执行,然后是 Party 中间件,最后是单路由参数里的中间件
- 同一个 Party 内多次
.Use,按调用顺序排队;单路由参数里的中间件排在所有.Use之后 - 若中间件 panic 且没被
recover捕获,整个请求会失败,不会继续往下走 - 不要在中间件里直接 return 或 write 响应后还调
c.Next(),可能触发 “http: multiple response.WriteHeader calls” 错误


















