我将以下代码作为自定义过滤器的一部分运行:
Cookie cookie = new Cookie("NAME", "VALUE");
cookie.setMaxAge(Integer.MAX_VALUE);
response.addCookie(cookie);
使用Jetty服务器运行UT时,我从servlet成功接收cookie。 然而,当我运行本地Tomcat服务器(使用IntelliJ)时,甚至没有在服务器端设置cookie(即不是客户端问题)。我能看到的唯一一个cookie是jsessionid cookie。
我试了以下但没有运气:
我在添加新Cookie后立即打印了所有响应Cookie,但我的Cookie未列出。
Collection<String> headers = ((HttpServletResponse) res).getHeaders("Set-Cookie");
for (String header : headers) {
System.out.println("Session Cookie:" + header);
}
我对Web应用程序和Java一般都很陌生,所以我也错过了一些非常基本的东西。 将在这里感谢任何帮助。
答案 0 :(得分:2)
我在这里找到答案:http://www.coderanch.com/t/577383/jforum/response-addCookie-work-filter。
简而言之:“添加cookie需要修改响应的HTTP头。一旦响应被”提交“,例如写入输出流的任何内容,就无法修改HTTP头。响应已由你尝试添加cookie的时候......大多数JSP的实现和一些servlet实际上都会在缓冲区中生成响应。这意味着响应没有被提交,输出被关闭或手动刷新。所以,这在某些应用程序中会起作用而不是在其他人“。
最重要的是,我需要在调用chain.doFilter(req,res)之前更新响应。