默认情况下,JRE提供CookieStore在内存中的实现,使CookieManager可以在运行时保存HttpCookies。 最终,即使在JVM关闭之后,也希望保留cookie和会话。
cookie管理器文档指出:
CookieStore是存储任何接受的HTTP cookie的地方。 如果创建时未指定,则CookieManager实例将使用 内部内存实现。 或者用户可以实施一个并告诉 CookieManager即可使用。
无法对HTTPCookie进行序列化而不进行反射,因为maxAge
字段是一个持续时间,用于定义cookie自创建以来的生存时间(以秒为单位)。该值仅与无法通过任何getter方法访问的对象的专用whenCreated
字段结合使用才有意义。
到目前为止,我发现的每个解决方案都忽略了这一事实,并且被打破了。
我们可以实现自己的CookieHandler
,并用我们自己的HttpCookie
实例替换默认的SerializedHttpCookie
,但是HttpCookie
类本身被定义为final,因此我们可以不能扩展它并遵守接口合同。
到目前为止,唯一的“有效”解决方案是扩展CookieHandler并创建映射以分别节省创建时间。但这只是骇客行为,也是使所有引用保持同步的噩梦。
“用户”如何实现无反射的持久性cookie存储?
Tldr :Jdk9 +不喜欢反思。没有它,就无法序列化HttpCookies。您如何持久保存cookie?