gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:40:18 24 4
gpt4 key购买 nike

如何为使用 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com