Grails-为每个响应添加头



我如何添加一个响应标头,比如X-Time,它看起来像:

X-Time: 112

给定的值是以毫秒为单位的响应处理时间?有没有一种真正简单的方法可以将其添加到Grails应用程序中?这不是我想永久保留的东西,但在开发我的应用程序时拥有它会很好。

要简单地向响应添加一个标头,可以使用after筛选器。

// grails-app/conf/MyFilters.groovy
class MyFilters {
    def filters = {
        addHeader(uri: '/*') {
            after = {
                response.setHeader('X-Time', value)
            }
        }
    }
}

编辑:

为了实际计算时间,使用javax.servlet.Filter而不是Grails过滤器可能更合适。

src/groovy/com/example/myproject/MyFilter.groovy

package com.example.myproject
import javax.servlet.*
class MyFilter implements Filter {
    void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        def start = System.currentTimeMillis()
        chain.doFilter(request, response)
        def elapsed = System.currentTimeMillis() - start
        response.setHeader('X-Time', elapsed as String)
    }
    void init(FilterConfig config) { }
    void destroy() { }
}

src/templates/war/web.xml(如果源树中还没有src/templates,请运行grails install-templates)

<filter>
  <filter-name>timer</filter-name>
  <filter-class>com.example.myproject.MyFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>timer</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

使用javax.servlet.Filter的原因是,您不必将"之前"one_answers"之后"的操作分开,因此可以在整个过滤链中保持开始时间&servlet执行。

补充说明:

对我来说,想要将服务器运行的执行时间作为响应头返回似乎很奇怪。也许你有充分的理由这样做,但在大多数情况下,我会a)更关心总的往返时间(如客户端所观察到的),或者B)出于我自己的系统管理/度量目的,在服务器上记录运行时间。

相关内容

  • 没有找到相关文章

最新更新