Para agregar simplemente un encabezado a la respuesta, puede usar un filtro after
.
// grails-app/conf/MyFilters.groovy
class MyFilters {
def filters = {
addHeader(uri: '/*') {
after = {
response.setHeader('X-Time', value)
}
}
}
}
Editar:
Para calcular realmente el tiempo, probablemente sería más adecuado utilizar un javax.servlet.Filter
en lugar de un filtro de Grails.
src/maravilloso/com/example/miproyecto/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/guerra/web.xml (griales ejecutar install-plantillas si src/templates ISN' t ya está en su árbol de fuentes)
<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>
la razón para usar el javax.servlet.Filter
es por lo que no tiene que separar el "antes" y "después" de acciones, y para ello puede e mantener el tiempo de inicio en toda la cadena de filtros & ejecución de servlet.
Indicaciones adicionales:
Para mí, parece extraño a querer devolver el servidor de transcurrido el tiempo de ejecución como una cabecera de respuesta. Quizás tenga una razón decente para hacerlo, pero en la mayoría de los casos, A) me preocuparía más por el tiempo total de ida y vuelta (según lo observado por el cliente), o B) estaría registrando los tiempos de ejecución transcurridos en el servidor para mi propios propósitos de administración/métrica del sistema.
Una aplicación útil de esto es tratar con ['X-UA-Compatible'' http-equiv'] (https://groups.google.com/forum/?fromgroups=#!topic/html5boilerplate/bRtrFSrKjtI) meta etiquetas utilizadas para establecer la versión del renderizador o chromeframe de IE, particularmente mediante el proyecto HTML5 Boilerplate. – cdeszaq