gpt4 book ai didi

android-spring resttemplate 管理 cookie

转载 作者:行者123 更新时间:2023-11-29 17:58:16 25 4
gpt4 key购买 nike

我在项目中使用 Spring for Android,我需要管理 cookie 存储/管理器。我可以使用 ClientHttpRequestInterceptor 的实现向任何请求添加 cookie,但我想在发送请求时删除其中一些。

更具体地说,我面临的问题是,对于 Froyo,Spring 中特定的实现(使用 DefaultHttpClient)会自动将来自 的 cookie 添加到 header 中code>CookieStore - 即使我明确设置标题。但我想自己管理这些 cookie(删除其中一些,或更新它们的值)。虽然对于上面的 Gingerbread(Spring 实现是使用 HttpURLConnection 完成的),但只有在我自己做时才会添加 cookie - 但是我不太确定,因为我没有看到Spring 设置任何 CookieHandler,但底线是我在执行请求时看不到它们,或者我可以看到它们已更新。所以这个问题更具体到 Froyo。

解决方法是重置连接工厂;像这样的东西:

protected void resetCookieStoreForTemplate(RestTemplate template) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO) {
template.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
}
}

在下面,这似乎重新创建了 DefaultHttpClient 并将使用新的 CookieStore。但在我看来,这有点难看。

总而言之,我的问题是:Spring for Android 是否存在?提供一些方法来公开一些用于 Cookie 管理的 API?顺路RestTemplate公开了连接性、连接工厂、消息转换器等的一些抽象,我很乐意为 cookie 管理提供一些抽象。

最佳答案

我自己没有使用过 Spring,但据我了解,它遵循官方建议并根据 API 版本切换 HTTP 客户端(这非常聪明,如果根据我的喜好严重过度设计的话)。当使用 HTTPUrlConnection 时,正如您提到的,Spring 可能不会更改 CookieHandler。您应该会看到内存中的 cookie 处理,因此在同一个应用程序运行中,一切都应该适用于请求,但当您关闭应用程序时,cookies 将被删除。你能确认这就是你所看到的吗?

如果是这样,您所要做的就是创建一个新的 CookieManager 实例,将自定义的 CookieStorenull 传递给它 CookiePolicy 使用默认值。

不幸的是,持久存储不是内置的,但编写一个也不是特别困难。

编辑:参见 here对于使用 SharedPreferences 的 CookieStore(我自己还没有测试过)。

关于android-spring resttemplate 管理 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17678450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com