根据这个mailinglist entry,应该在转发上调用grails过滤器。这有效地导致过滤器被调用1 + x number of forwards
。
然而,在我的情况下,我质疑如何做到这一点的方法。这是我系统的粗略混搭:
"/api/**"
"/api/$version/$apiKey/$rest**"
$rest
可能包含(例如)值/book/show/1
$rest
让我说我访问网址/api/0.1/Ks38...7fn38/book/show/1
然后发生的是调用api过滤器并执行所有版本和apiKey验证。然后它继续转发到uri /book/show/1
,然后第二次调用Api过滤器,即使过滤器再次映射/api/**
并且新uri实际上是/book/...
。现在让我们说,我同意应该在前锋上调用过滤器,但我不同意当我向/book...
前进时,应该再次调用api过滤器
这可能是不正确的行为?可以吗?
答案 0 :(得分:0)
我遇到了同样的问题,并在Grails邮件列表上详细讨论过。此行为自1.2.x之前就已存在,并且不太可能发生变化。
结果我能够通过在我的“ApiController”中转发之前添加一个flash参数(flash.apiValid = true)来“修复”这个问题,然后在我的过滤器中进行检查以防止调用ApiController试。
虽然这可能不是最优雅的解决方案,但它是一种有效的解决方案。希望它也能帮到你。
答案 1 :(得分:0)