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

使用ContentCachingResponseWrapper丢失标题

单品
2023-03-14

我必须记录响应正文和响应标题。为此,我使用了拦截器和ContentCachingResponseWrapper类(我也尝试了filter,但结果相同)。当我将两者结合起来时,我会丢失一些标题信息,但如果我只使用拦截器,则不会丢失。

我的dispatcherServlet:

@Component("dispatcherServlet")
public class MyDisPatcherServlet extends DispatcherServlet {
    @Override
    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            super.doDispatch(request, new ContentCachingResponseWrapper(response));
        } catch (Exception e) {
            super.doDispatch(request,response);
        }
    }
}

当我在拦截器的postHandle中使用ContentCachingResponseWrapper时:

private Map<String, List<Object>> getHeaders(HttpServletResponse response){
    Map<String, List<Object>> headersList = new HashMap<>();
    Collection<String> headerNames = ((ContentCachingResponseWrapper)response).getHeaderNames();
    // Same if I use response.getHeaderNames()
    if (headerNames != null) {
        for(String headerName : headerNames){
            headersList.put(headerName, Arrays.asList(response.getHeaders(headerName))); 
        }
    }
    return headersList;
}

标题结果:

{设置Cookie=[[JSESSIONID=109DE678B86611DE627B9B7B3B513DEF;路径=/服务/服务;HttpOnly]]}

如果我停用组件MyDisPatcherServlet,并直接从响应中读取标头名称:

private Map<String, List<Object>> getHeaders(HttpServletResponse response){
    Map<String, List<Object>> headersList = new HashMap<>();
    Collection<String> headerNames = response.getHeaderNames();
    if (headerNames != null) {
        for(String headerName : headerNames){
            headersList.put(headerName, Arrays.asList(response.getHeaders(headerName))); 
        }
    }
    return headersList;
}

标题结果:

{X-Frame-Options=[[拒绝]]、传输编码=[[分块]、缓存控制=[[无缓存、无存储、最大年龄=0、必须重新验证]、X-Content-Type-Options=[[无缓存]、连接=[[关闭]、设置Cookie=[[JSESSIONID=9E2F642595202D87935F4CD5C089ADFE;路径=/服务/服务;HttpOnly]、Pragma=[[无缓存]、过期=[[0]、X-XSS-Protection=[[1;模式=块]、日期=[1][[2018年7月23日星期一16:15:55 GMT]],内容类型=[[应用程序/json;字符集=UTF-8]]}

提前谢谢。

共有1个答案

魏岳
2023-03-14

在检索标题之前,必须调用copyBodyToResponse()。

 类似资料:
  • 我正在使用Firebase云消息在Unity android应用程序中进行消息推送,我得到了一个小图标很好,但缺少右侧应用程序图标。请在此处查看附加的image.enter图像描述我正在寻找解决方案,但没有找到。如果有解决方案,请分享。提前谢谢!

  • 在我的代码中,我使用下面的代码来设置表视图的节标题。它运行良好。 我想自定义标题的背景颜色,所以我在上面的代码之前插入了下面的代码。 结果,背景颜色发生变化,而标题文本丢失。

  • 问题内容: 我今天犯了升级Eclipse的错误,现在无法启动新的Android项目。 我收到消息Proguard.cfg(找不到文件)。 我似乎在哪里找不到这东西?是否有可能摆脱它我在这个项目中不需要混淆… 谢谢 问题答案: 如果您确实不需要Proguard来混淆发行版,则可以从项目根文件夹的default.properties文件中删除以下行: proguard.config = proguar

  • 我有和这篇文章一样的问题:用户想要删除图例中重复的条目: 停止matplotlib在图例中重复标签 答案也适用于我,但是,当我使用它时,图例格式完全丢失。当我使用斧头时会发生这种情况。图例(句柄、标签)方法。以下代码(复制自http://matplotlib.org/examples/pylab_examples/legend_demo.html)说明了这个问题: 欢迎任何建议 编辑1:更正输入错

  • 问题内容: 除了是否应使用NULL之外,我还负责一个现有数据库,该数据库使用NULL表示“丢失或从未输入”数据。它不同于空字符串,这表示“用户设置了此值,并且他们选择了’空’”。 该项目的另一个承包商坚决主张“对于我来说不存在NULL;我从不使用NULL,并且任何人都不应使用NULL”。但是,令我困惑的是,由于承包商的团队确实承认“缺少/从未输入”和“故意空着或由用户指示为未知”之间的区别,因此他

  • 问题内容: 我想在我的网站上使用,但得到以下信息: 我试过打印。输出以下内容: 谁能帮助我找到或建议替代方案? 问题答案: 从文档中: 页面(如果有的话)的地址,该页面将用户代理引至当前页面。这是由用户代理设置的。并非所有的用户代理都将设置此功能,有些用户代理提供了将HTTP_REFERER修改为功能的功能。简而言之,它不能真正被信任。