当前位置: 首页 > 知识库问答 >
问题:

Java Servlet过滤器-根据状态修改响应头

白学
2023-03-14
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
   HttpServletResponse httpServletResponse = (HttpServletResponse) response;
   HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(httpServletResponse);

   chain.doFilter(request, responseWrapper);

   if(responseWrapper.getStatus() < 400)
   {
      responseWrapper.addHeader("X-Custom-Foobar", "abc");
   }
}

在检查完成之前,我是否必须在包装器中捕获一些东西以防止响应发送到客户机?

共有1个答案

吕德惠
2023-03-14

因此,这个规范令人沮丧的部分是,您必须完全截获ServletOutputStream并对其进行缓冲。我最终遵循了下面的示例::https://stackoverflow.com/a/11027170/76343

基类HttpServletResponseWrapper是一个完整的passthrough,一旦关闭输出流,对响应的所有进一步修改都是静音的。

不幸的是,似乎没有更优雅的方法来实现这一点。

 类似资料:
  • 我有下面的servlet过滤器。

  • 我目前正在使用Spring Cloud和Feign在我的应用程序中使用微服务。由于在单个服务实例中数据库连接或类似的情况可能会失败,使其返回500个HTTP状态代码,所以我想确保下一个服务器是由服务的客户机重试的。目前,Ribbon的重试机制在服务完全不运行时就像一个魅力一样工作,但当它收到500状态码时,它仍然会立即返回错误,而不进行任何重试。 如果一个实例返回500响应,是否可以配置假客户机或

  • 如果有人能抛出关于如何修改以下播放框架日志过滤器(ref.play filters)以实现以下目标的指针,我将不胜感激: null

  • 我想在Spring Security过滤器中修改响应的内容。假设我想要的如下: 过滤器后面有一个REST服务,它检索字符串列表。如果我使用getOutputStream()进行写入,那么我可以在客户端上读取字符串列表(而不是字符串“Hello”)。如果我使用getWriter(),那么我会收到以下错误: 如何修改Spring安全过滤器中的响应内容?顺便说一句,我使用野蝇10,但它也应该适用于雄猫和

  • 在Angular中,将您的操作创建者定义为服务非常方便,将dispatch,创建和副作用逻辑与应用程序中的类分离。 app/store/counter/counter.actions.ts 如果必须处理异步或条件actions(react-redux 用户可能将这种模式识别为依赖注入世界中的redux-thunk),则“ActionCreatorService”模式非常方便。 app/store/

  • 我需要在每个响应中添加标题。我正打算在下面做 我想在之后这样做,以便一旦控制器处理它,我只是在返回客户端之前添加标头。是正确的吗? 但如何编写响应过滤器? 在已返回,对响应执行任何操作都为时已晚。此时,整个响应已经发送到客户端,您的代码无法访问它。 我觉得上面的说法不对。我不能在过滤链之后添加标题。doFilter(请求、响应)?如果不是,为什么? 我使用的是spring mvc。