我想将此自定义标头添加到我的其余 API 上的每个响应中:
"customHeader": "foo"
Run Code Online (Sandbox Code Playgroud)
为此,我创建了一个匹配每个控制器的 grails 拦截器,并允许我修改请求。
class FooInterceptor {
FooInterceptor() {
matchAll()
}
boolean before() { true }
boolean after() {
header 'customHeader', "foo" //first try
response.addHeader 'customHeader', "foo" //second try to do the same
response.setHeader 'customHeader', "foo" //third try, setHeader doesn't work either
true
}
void afterView() {
}
}
Run Code Online (Sandbox Code Playgroud)
我已经调试了,可以看到控制器响应后调用了after方法:
respond([status:dodes.OK], [:])
Run Code Online (Sandbox Code Playgroud)
我可以清楚地看到我的拦截器被调用并且 addHader 没有抛出任何异常,但我的标头没有添加到最终响应中。
我的猜测是,也许圣杯的响应方法以某种方式“锁定”了响应,因此无法在之后添加标头,但我不确定。
如何使用拦截器向 grails 3 上的每个响应添加标头?
以下内容对我有用。您可能需要使用before()代替。
class FooInterceptor {
FooInterceptor() {
match controller: '*', action: '*'
}
boolean before() {
response.setHeader('customHeader', "foo")
true
}
boolean after() { true }
void afterView() {
// no-op
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |