我有几个“之前”类型的过滤器,仅当真正的,未转发的请求到达我的服务器时,才触发这些过滤器。并非如此,当我有时将请求转发到另一个控制器/动作以进行进一步处理时。
我的问题是,是否有一种简单的方法来检测由“ forward()”调用引起的这种特殊类型的请求?
或者,我正在考虑解析请求url,并检查控制器和动作是否与当前控制器/动作匹配,但是我不确定这是否行得通-并且这肯定是处理此问题的非常丑陋的方法...
在我的控制器操作中,我试图查看请求对象上是否有任何有用的属性,但找不到“ javax.servlet.forward.request_uri”和“ org.codehaus.groovy.grails”之外的任何有用属性。 .CONTROLLER_NAME_ATTRIBUTE“ +” org.codehaus.groovy.grails.ACTION_NAME_ATTRIBUTE“。但是,如果请求uri源自UrlMapping,则似乎无法将这些值相互比较(在这种情况下,它可能与控制器/操作不匹配)
您可以通过查询servlet属性来确定是否转发了请求org.grails.FORWARD_CALLED
:
request.getAttribute('org.grails.FORWARD_CALLED')
最小示例(在Grails 3.3.9中,尽管在2.5.x中具有相同的属性):
def index() {
forward action: 'fwd'
}
def fwd() {
if (request.getAttribute('org.grails.FORWARD_CALLED')) {
render 'was called by forward'
} else {
render 'called directly'
}
}
调用端点:
$ curl localhost:8080/foo/index
was called by forward
$ curl localhost:8080/foo/fwd
called directly
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句