在Spring Boot中设置响应头 [英] Set response header in Spring Boot

查看:2501
本文介绍了在Spring Boot中设置响应头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在使用Spring Boot进行的应用程序中为每个调用设置响应头?
我想尝试使用过滤器来拦截所有呼叫并能够设置响应头。
我遵循了指南禁用浏览器缓存HTML5 ,但只进行了设置

How can I set the response header for each call in my application made with Spring Boot? I would like to try to use a filter to intercept all the calls and be able to set the response header. I followed the guide Disable browser caching HTML5, but only set the request header, and not always.

推荐答案

有三种方法可以做到这一点:

There are three ways to do this:


  1. 在Controller类中设置特定控制器的响应:

  1. Set the response for a specific controller, in the Controller class:


@Controller
@RequestMapping(value = DEFAULT_ADMIN_URL + "/xxx/")
public class 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, final HttpServletResponse response) {
    response.setHeader("Cache-Control", "no-cache");
    return employeeService.findEmployeesForEmployer(employerId);
}




  1. 或者您也可以将响应头放在应用程序中的每个调用(这是基于Spring注释的,否则请参见自动向每个响应添加标头):

  1. Or you can put the response header for each call in the application (this is for Spring annotation-based, otherwise see automatically add header to every response):




@Component
public class Filter extends OncePerRequestFilter {
....
 @Override
 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws 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("Expires", "0"); // Proxies.
    filterChain.doFilter(request, response);
 }
}




  1. 最后的方法我发现正在使用扩展HandlerInterceptorAdapter的Interceptor;有关更多信息,请参见 https://www.concretepage.com / spring / spring-mvc / spring-handlerinterceptor-annotation-example-webmvcconfigureradapter


  • 创建扩展HandlerInterceptorAdapter的拦截器: / li>
  • create your Interceptor that extends HandlerInterceptorAdapter:




public class HeaderInterceptor extends HandlerInterceptorAdapter {

  @Override
  public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) {
    httpServletResponse.setHeader("Cache-Control", "no-store"); // HTTP 1.1.
    httpServletResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    httpServletResponse.setHeader("Expires", "0"); // Proxies.
    return true;
  }
}




  • 在扩展WebMvcConfigurerAdapter的MvcConfig中,您必须覆盖addInterceptors方法并添加新的拦截器:

  • 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        ....
        registry.addInterceptor(new HeaderInterceptor());
    }
    


    我希望我会有所帮助!

    这篇关于在Spring Boot中设置响应头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆