7days-golang icon indicating copy to clipboard operation
7days-golang copied to clipboard

Fix:middleware matching error 修复中间件匹配错误

Open AimTao opened this issue 11 months ago • 0 comments

gee-web/day5-middleware

背景

比如,我有三个路由地址:

  • /user/id
  • /user/task
  • /username

其中,/user 是一个 RouterGroup,上面配置了一个中间件 logger。

问题

当我访问 /username 时,它并不属于 /user group,但也会匹配到这个中间件。

原因

ServeHTTP 中的这个判断,会判断 /username 包含 /user。

if strings.HasPrefix(req.URL.Path, group.prefix) {

修正

不直接使用 group.prefix,而使用 group.prefix + "/" 进行匹配。 因为我们路径是按照 "/" 来分隔的,这样处理不会先出现误匹配的情况。


PS:看了一下 gin 的实现,对于中间件的匹配,是在 addRoute 时处理的,并将中间件保存在 Router 的 map 中。 这样既可以避免查找,也有利于提升处理请求的性能,大家可以参考。

AimTao avatar Sep 15 '23 08:09 AimTao