在Spring Boot中设置响应头 [英] Set response header in 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:
-
在Controller类中设置特定控制器的响应:
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);
}
- 或者您也可以将响应头放在应用程序中的每个调用(这是基于Spring注释的,否则请参见自动向每个响应添加标头):
- 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);
}
}
-
最后的方法我发现正在使用扩展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屋!