Я нашел способ. В конце концов, это было совсем не сложно. При выполнении некоторых запросов с помощью моего отладчика я заметил, что onEndRequest()
действительно вызывается для запросов Ajax .
Метод onEndRequest()
уже был переопределен в нашей пользовательской реализации RequestCycle для других целей (фиксация транзакции), поэтому я просто переместил код, который устанавливает заголовок, из getWebResponse()
.
@Override
protected void onEndRequest() {
super.onEndRequest();
((WebResponse) response).setHeader("X-custom", "..." );
// ...
}
Возможно, единственной неочевидной вещью здесь было то, что мне нужно было преобразовать response
в WebResponse (когда тип поля Response ), чтобы иметь возможность вызвать setHeader()
.
Это можно было бы сделать и в обычном фильтре Java EE , установив заголовок после вызова chain.doFilter()
(см. Мой второй комментарий по этому вопросу). Я не выбрал это, потому что 1) мне было непонятно, как подключить туда доступ к данным и 2) я не хочу дополнительных движущихся частей, если я могу избежать этого. Мы уже используем наш подкласс RequestCycle для вещей, связанных с заголовками HTTP, и это хорошо вписывается. Фактически, это изменение упростило этот класс, так как больше нет причин переопределять getWebResponse()
!