在 Spring Boot 中设置响应头
Posted
技术标签:
【中文标题】在 Spring Boot 中设置响应头【英文标题】:Set response header in Spring Boot 【发布时间】:2018-09-01 00:29:18 【问题描述】:如何为我的应用程序中使用 Spring Boot 进行的每个调用设置响应标头? 我想尝试使用过滤器来拦截所有调用并能够设置响应标头。 我遵循指南Disable browser caching html5,但只设置请求标头,并非总是如此。
【问题讨论】:
【参考方案1】:有三种方法可以做到这一点:
在 Controller 类中为特定控制器设置响应:
@控制器 @RequestMapping(值 = DEFAULT_ADMIN_URL + "/xxx/") 公共类 XxxController …… @ModelAttribute 公共无效 setResponseHeader(HttpServletResponse 响应) response.setHeader("缓存控制", "无缓存"); ……或
@RequestMapping(value = "/find/employer/employerId", 方法 = RequestMethod.GET) 公共列表 getEmployees(@PathVariable("employerId") 长的employerId,最终的 HttpServletResponse 响应) response.setHeader("缓存控制", "无缓存"); return employeeService.findEmployeesForEmployer(employerId);-
或者您可以将 each 调用的响应头放在应用程序中(这是基于 Spring 注释的,否则请参阅automatically add header to every response):
我发现的最后一种方法是使用扩展 HandlerInterceptorAdapter 的拦截器;欲了解更多信息,请参阅https://www.concretepage.com/spring/spring-mvc/spring-handlerinterceptor-annotation-example-webmvcconfigureradapter
创建扩展 HandlerInterceptorAdapter 的拦截器:希望对您有所帮助!
【讨论】:
选项 2 是最好的!谢谢。【参考方案2】:实现过滤器并通过@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 >> ");
【讨论】:
以上是关于在 Spring Boot 中设置响应头的主要内容,如果未能解决你的问题,请参考以下文章
097-为什么我们在SpirngBoot中设置了响应头的编码,浏览器解析出来依然回事乱码呢?
097-为什么我们在SpirngBoot中设置了响应头的编码,浏览器解析出来依然回事乱码呢?
spring boot使用http响应头传输:编码,但是tcp发送两个数据包即使响应很小