Java 当浏览器关闭时,如何使Spring生成的Cookie过期?

Java 当浏览器关闭时,如何使Spring生成的Cookie过期?,java,spring,servlets,spring-boot,Java,Spring,Servlets,Spring Boot,Spring引导应用程序具有REST服务,这些服务在Spring控制器内设置cookie值,然后使用HttpServletResponse在响应中将cookie发送到客户端,如下所示: response.addCookie(new Cookie("AUTH1", "no")); 但当我关闭firefox,然后重新打开firefox并再次调用应用程序的url时,cookie值完全相同如何确保浏览器关闭时cookie值被销毁,以便重新打开浏览器时cookie不存在?这可以在Spring Boot应

Spring引导应用程序具有REST服务,这些服务在Spring控制器内设置cookie值,然后使用
HttpServletResponse
在响应中将cookie发送到客户端,如下所示:

response.addCookie(new Cookie("AUTH1", "no"));
但当我关闭firefox,然后重新打开firefox并再次调用应用程序的url时,cookie值完全相同如何确保浏览器关闭时cookie值被销毁,以便重新打开浏览器时cookie不存在?这可以在Spring Boot应用程序中配置吗?或者我需要在前端应用程序中配置它吗


持续努力:

将后端REST控制器中的所有
response.setCookie()
行更改为相同键值对的
session.setAttribute()
行不会产生AngularJS客户端应用程序可以使用
$cookies.get('keyname')
读取的任何内容,即使它们是相同的键值有没有办法在Spring控制器中设置会话cookie,当用户关闭浏览器时会自动销毁这些cookie?

我还尝试使用一种方法来实现
@shazin
的建议(因为Cookie在controller类中被多次重新创建),但问题只得到了部分解决。具体而言,我采取了以下步骤:

1.)我一开始打开了几个浏览器窗口,其中只有一个包含正在测试的应用程序。
2.)我更改了所有代码,如下所示,
3.)然后我用control-C终止了应用程序,也终止了端口上运行的进程。
4.)然后我
mvn清洁包

5.)然后我用
java-jar jarname
再次启动应用程序,并将其加载到新的InPrivate浏览器窗口中。
6.)我使用注销方法删除以前版本中可能存在的任何cookie,
7.)然后我使用GUI触发新的cookie定义,这些定义按预期工作。
8.)但随后我关闭包含正在测试的应用程序的浏览器窗口,然后重新打开一个新的浏览器窗口并再次导航到该站点,进行测试,但是cookie值仍然存在,因此这种方法没有解决问题。
9.)最后,我关闭了两个打开的浏览器窗口(每个浏览器窗口都有自己打开的几个选项卡。关闭所有浏览器窗口后,我打开了一个新的浏览器窗口,发现cookie已被删除。因此,只有关闭所有打开的浏览器窗口,而不仅仅是包含应用程序的浏览器窗口,下面的方法才有效。

以下是我为实现@shazin的建议而编写的方法:

public Cookie getTempCookie(String key, String val){
    Cookie tempCookie = new Cookie(key, val);
    tempCookie.setMaxAge(-1);
    return tempCookie;
}
下面是我如何从控制器内的各种url模式处理程序调用该方法:

response.addCookie(getTempCookie("AUTH1", "yes"));

只有包含应用程序的窗口关闭时,我还能做些什么来删除Cookie?在目前的形式下,如果用户关闭浏览器窗口而没有意识到另一个浏览器窗口仍在打开,则仍然存在安全风险。

您可以做的是将Cookie的最大年龄设置为-1,这将不保留cookie,并将在浏览器关闭时删除

Cookie authCookie = new Cookie("AUTH1", "no");
authCookie.setMaxAge(-1);
response.addCookie(authCookie);
Javadoc for Max Age说:

A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits. A zero value causes the cookie to be deleted.

我在OP的末尾添加了一个部分,其中包含尝试您的建议的结果。您的方法只取得了部分成功。感谢您和+1花时间帮助我们向前推进。您能提出更完整的解决方案吗?