spring-boot - 在 Spring Boot 中设置响应头

标签 spring-boot filter browser-cache response-headers no-cache

如何为使用 Spring Boot 进行的应用程序中的每个调用设置响应 header ?
我想尝试使用过滤器来拦截所有调用并能够设置响应 header 。
我按照指南 Disable browser caching HTML5 ,但只设置请求 header ,并不总是如此。

最佳答案

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

  • 在 Controller 类中设置特定 Controller 的响应:

    @ Controller
    @RequestMapping(值 = DEFAULT_ADMIN_URL + "/xxx/")
    公共(public)类 XxxController
    ……
    @ModelAttribute
    公共(public)无效 setResponseHeader(HttpServletResponse 响应) {
    response.setHeader("缓存控制", "无缓存");
    ……
    }

    或者

    @RequestMapping(value = "/find/employer/{employerId}", 方法 = RequestMethod.GET)
    public List getEmployees(@PathVariable("employerId") 长的employerId,最终的HttpServletResponse 响应) {
    response.setHeader("缓存控制", "无缓存");
    return employeeService.findEmployeesForEmployer(employerId);
    }
  • 或者您可以将每个调用的响应头放在应用程序中(这是基于 Spring 注释的,否则请参阅 automatically add header to every response):

  • @零件
    公共(public)类过滤器扩展了OncePerRequestFilter {
    ……
    @覆盖
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, 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(request, response);
    }
    }
  • 我发现的最后一种方法是使用扩展 HandlerInterceptorAdapter 的拦截器;欲了解更多信息,请参阅 https://www.concretepage.com/spring/spring-mvc/spring-handlerinterceptor-annotation-example-webmvcconfigureradapter
  • 创建扩展 HandlerInterceptorAdapter 的拦截器:

  • 公共(public)类 HeaderInterceptor 扩展 HandlerInterceptorAdapter {

    @覆盖
    公共(public) bool 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");//代理。
    返回真;
    }
    }
  • 在扩展 WebMvcConfigurerAdapter 的 MvcConfig 中,您必须重写 addInterceptors 方法并添加新的拦截器:

  • @覆盖
    公共(public)无效添加拦截器(拦截器注册表){
    ……
    registry.addInterceptor(new HeaderInterceptor());
    }

    我希望我有帮助!

    关于spring-boot - 在 Spring Boot 中设置响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49430853/

    相关文章:

    spring-boot - 使用 Spring Boot 通过 Cassandra Config 获取指标异常

    delphi - 如何在 EXE 中直接嵌入 DirectShow Push Source 过滤器?

    ruby-on-rails - rails : image_tag doesn't append timestamp of image's last change (to force refresh instead of cache when loading page)

    php - 是否可以将图像存储在用户的浏览器上

    c# - Cache.SetMaxAge 在 IIS 下不工作,在 VS Dev Srv 下工作正常

    spring-boot - 开类 : Spring boot : log4j settings -- configuration and finding the application log file

    neo4j - 从 SDN 4.0 迁移到 SDN 4.1.RC1 时出现 GraphQueryLookupStrategy.resolveQuery 异常

    spring-boot - 使用 Spring boot + WebFlux 处理全局错误

    javascript - 在 HTTP 仍在进行时进行过滤 Angular

    c# - 如何在 C# 中将位图图像转换为黑白图像?