无法使用 Tomcat 设置 servlet cookie

Cannot set servlet cookies using Tomcat

我有以下代码 运行 作为自定义过滤器的一部分:

Cookie cookie = new Cookie("NAME", "VALUE");
cookie.setMaxAge(Integer.MAX_VALUE);
response.addCookie(cookie);

当 运行 UT 使用 Jetty 服务器时,我从 servlet 成功接收到 cookie。 然而,当我是 运行 本地 Tomcat 服务器(使用 IntelliJ)时,cookie 甚至没有在服务器端设置(即不是客户端问题)。我能看到的唯一 cookie 是 jsessionid cookie。

我尝试了以下但没有成功:

  1. setDomain("")
  2. setPath("/")
  3. response.flushBuffer() 添加 cookie 后。

我在添加新 cookie 后立即打印所有响应 cookie,但未列出我的 cookie。

Collection<String> headers = ((HttpServletResponse) res).getHeaders("Set-Cookie");
for (String header : headers) {
    System.out.println("Session Cookie:" + header);
}

我对 Web 应用程序还很陌生,Java 总的来说,所以我也有可能错过了一些非常基本的东西。 在这里将不胜感激。

我在这里找到了答案:http://www.coderanch.com/t/577383/jforum/response-addCookie-work-filter

简而言之:"Adding a cookie requires modifying the HTTP headers of the response. Once the response has been "已提交”,例如,任何写入输出流的内容,您都无法修改 HTTP headers。当您尝试添加 cookie 时,响应已提交...大多数 JSP implimentations 和一些 servlet 实际上会在缓冲区中生成响应。这意味着响应未提交,输出已关闭或手动刷新。因此,这在某些应用程序中有效,但在其他应用程序中无效".

最重要的是,我需要在调用 chain.doFilter(req, res) 之前更新响应。