Установить заголовок ответа в Spring Boot

Как установить заголовок ответа для каждого вызова в приложении, выполненного с помощью Spring Boot? Я хотел бы попытаться использовать фильтр, чтобы перехватывать все вызовы и иметь возможность установить заголовок ответа. Я следовал руководству Отключить кеширование браузера HTML5, но только установил заголовок запроса, и не всегда.

2 ответа

Есть три способа сделать это:

  1. Установите ответ для определенного контроллера в классе 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);
    }
    1. Или вы можете поместить заголовок ответа для каждого вызова в приложении (это для 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(запрос, ответ);
     }
    }
    1. Последний способ, который я нашел, - это использование 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 >> ");
    }
    }
Другие вопросы по тегам