grails过滤器在此实例中应该向前运行两次吗?

时间:2011-06-01 17:40:42

标签: grails

根据这个mailinglist entry,应该在转发上调用grails过滤器。这有效地导致过滤器被调用1 + x number of forwards

然而,在我的情况下,我质疑如何做到这一点的方法。这是我系统的粗略混搭:

  • 我有一个在"/api/**"
  • 的uri条件下调用的过滤器
  • 一个类似于此的urlmapping:"/api/$version/$apiKey/$rest**"
    • $rest可能包含(例如)值/book/show/1
  • 一个ApiController,其唯一目的是转发到另一个uri,具体取决于$rest

让我说我访问网址/api/0.1/Ks38...7fn38/book/show/1然后发生的是调用api过滤器并执行所有版本和apiKey验证。然后它继续转发到uri /book/show/1,然后第二次调用Api过滤器,即使过滤器再次映射/api/**并且新uri实际上是/book/...。现在让我们说,我同意应该在前锋上调用过滤器,但我不同意当我向/book...前进时,应该再次调用api过滤器

这可能是不正确的行为?可以吗?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并在Grails邮件列表上详细讨论过。此行为自1.2.x之前就已存在,并且不太可能发生变化。

结果我能够通过在我的“ApiController”中转发之前添加一个flash参数(flash.apiValid = true)来“修复”这个问题,然后在我的过滤器中进行检查以防止调用ApiController试。

虽然这可能不是最优雅的解决方案,但它是一种有效的解决方案。希望它也能帮到你。

答案 1 :(得分:0)

很好,前锋在技术上并不是一个新的'请求',并且正在使用原始请求。如果将forwardUri与控制器/操作进行比较,您会注意到更改。这就是API Toolkit如何处理链接并避免像这样的冲突。