Установить заголовок ответа в Spring Boot
Как установить заголовок ответа для каждого вызова в приложении, выполненного с помощью Spring Boot? Я хотел бы попытаться использовать фильтр, чтобы перехватывать все вызовы и иметь возможность установить заголовок ответа. Я следовал руководству Отключить кеширование браузера HTML5, но только установил заголовок запроса, и не всегда.
2 ответа
Есть три способа сделать это:
Установите ответ для определенного контроллера в классе Controller:
@Controller @RequestMapping (значение = DEFAULT_ADMIN_URL + "/xxx/") открытый класс XxxController .... @ModelAttribute public void setResponseHeader(HttpServletResponse response) { response.setHeader("Cache-Control", "no-cache"); .... }
или же
@RequestMapping(value = "/find/ Employer/{EmployerId}", method = RequestMethod.GET) public List getEmployees(@PathVariable("EmployerId") Long EmployerId, окончательный ответ HttpServletResponse) { response.setHeader ("Cache-Control", "no-cache"); return employeeService.findEmployeesForEmployer (EmployerId); }
- Или вы можете поместить заголовок ответа для каждого вызова в приложении (это для Spring на основе аннотаций, в противном случае смотрите автоматическое добавление заголовка к каждому ответу):
@Составная часть Открытый класс Filter расширяет OncePerRequestFilter { .... @Override protected void doFilterInternal(запрос HttpServletRequest, ответ HttpServletResponse, FilterChain filterChain) выдает ServletException, IOException { //response.addHeader("Access-Control-Allow-Origin", "*"); //response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. response.setHeader("Cache-Control", "no-store"); // HTTP 1.1. response.setHeader("Pragma", "no-cache"); // HTTP 1.0. response.setHeader("Истекает", "0"); // Прокси. filterChain.doFilter(запрос, ответ); } }
Последний способ, который я нашел, - это использование Interceptor, расширяющего HandlerInterceptorAdapter; Для получения дополнительной информации см. https://www.concretepage.com/spring/spring-mvc/spring-handlerinterceptor-annotation-example-webmvcconfigureradapter
- создайте ваш перехватчик, который расширяет HandlerInterceptorAdapter:
открытый класс HeaderInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Обработчик объектов) { httpServletResponse.setHeader("Cache-Control", "no-store"); // HTTP 1.1. httpServletResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0. httpServletResponse.setHeader("Истекает", "0"); // Прокси. вернуть истину; } }
- В вашем MvcConfig, который расширяет WebMvcConfigurerAdapter, вы должны переопределить метод addInterceptors и добавить новый Interceptor:
@Override public void addInterceptors (реестр InterceptorRegistry) { .... registry.addInterceptor(новый HeaderInterceptor()); }
Я надеюсь, что я был полезным!
Реализовать фильтр и зарегистрирован @Component
аннотаций. @Order(Ordered.HIGHEST_PRECEDENCE)
используется для приоритета выполнения Советов.
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class NoCacheWebFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(NoCacheWebFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
logger.debug("Initiating WebFilter >> ");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HeaderMapRequestWrapper requestWrapper = new
HeaderMapRequestWrapper(req);
// implement you logic to add header
//requestWrapper.addHeader("remote_addr", "");
chain.doFilter(requestWrapper, response);
}
@Override
public void destroy() {
logger.debug("Destroying WebFilter >> ");
}
}