Все есть в коде и в JavaDocs.Для начала я бы расширил SimpleCachingHeadersPageCachingFilter
и переопределил buildPage()
:
public class CustomHeadersPageCachingFilter extends SimpleCachingHeadersPageCachingFilter {
@Override
protected PageInfo buildPage(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws AlreadyGzippedException, Exception {
PageInfo pageInfo = super.buildPage(request, response, chain);
headers.add(new Header<String>("X-Content-Type-Options", "nosniff"));
headers.add(new Header<String>("X-XSS-Protection", "1; mode=block"));
return pageInfo;
}
}
Однако JavaDoc для метода, который мы переопределяем, утверждает, что:
Для управления собственными заголовками кэширования,use {@link SimplePageCachingFilter
}.
SimplePageCachingFilter
- это базовый класс SimpleCachingHeadersPageCachingFilter
, который расширяется прямо сейчас.Однако я думаю, что этот комментарий предлагает использовать первый класс, если мы хотим использовать совершенно разные заголовки.Если мы хотим сохранить стандартные заголовки (добавленные последним классом через super.buildPage()
), этот подход кажется верным.
Отказ от ответственности: обратите внимание, что расширение поведения класса путем его расширения и переопределение некоторых методов путем первого вызова super
versionи добавление некоторой логики не лучший метод ОО.