performance - Grails - 为每个响应添加 header

标签 performance grails http-headers aop

我如何添加响应头 - 比如说 X-Time这看起来像:X-Time: 112给出的值是响应处理所需的时间(以毫秒为单位)?有没有一种非常简单的方法可以将它添加到 Grails 应用程序中?不是我想永久保留的东西,但在开发我的应用程序时会很高兴。

最佳答案

要简单地向响应添加 header ,您可以使用 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的原因这样您就不必将“之前”和“之后”操作分开,因此可以在整个过滤器链和 servlet 执行中保持开始时间。

补充说明:

对我来说,想要将服务器经过的执行时间作为响应头返回似乎很奇怪。也许您有这样做的正当理由,但在大多数情况下,我会 A) 要么更关心总往返时间(如客户端所观察到的那样),要么 B)为我的服务器记录经过的执行时间自己的系统管理/指标目的。

关于performance - Grails - 为每个响应添加 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6415452/

相关文章:

python - 从数组的下 n 个元素高效地创建数组

Python:用于查找表的列表与字典

grails - GORM 创建条件 - 使用 SQL 的 'having' 子句

grails - Grails从域验证器获取 session 变量

performance - pig 性能问题

performance - Postgres 8.3 中的位图扫描比索引扫描 Postgres 9.4 快 2 倍?

postgresql - Liquibase:关系 "databasechangeloglock"已经存在,使用 grails 插件和非默认模式

java - 断言该值在java和testng或junit中的map中设置

java - netty http 请求 getContent 有时会在正文中给出标题

python - 更改 Selenium 网络驱动程序的用户代理