在 grails 3 拦截器中的每个请求上添加一个响应头

Bla*_*erg 5 grails groovy

我想将此自定义标头添加到我的其余 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 上的每个响应添加标头?

dre*_*dre 1

以下内容对我有用。您可能需要使用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)