Чтобы просто добавить заголовок к ответу, вы можете использовать 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 (запустите grails install-templates, если src / 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
заключается в том, что вам не нужно выделять ваше "before" и«после» действий, и поэтому может удерживать время начала на протяжении всей цепочки фильтров и выполнения сервлета.
Дополнительное примечание:
Мне кажется страннымхотите вернуть истекшее время выполнения сервера в качестве заголовка ответа.Возможно, у вас есть достойная причина для этого, но в большинстве случаев я бы либо A) либо больше беспокоился об общем времени прохождения туда-обратно (как замечено клиентом), либо B) регистрировал истекшее время выполнения на сервере для моего сервера.собственные цели системного администрирования / метрики.