HttpURLConnectionとCookieサポートのちぐはぐさ

以前のエントリで、Java6では永続Cookieの読み書きサポートが追加されたと書いたが、これはあくまでJava Plugin環境又はJava Web Start環境での話であり、一般的なSwingアプリケーションでは以下のコードのようにデフォルトのCookieManagerを生成して取得できるCookieHandlerではインメモリ上で扱うCookieしか使用できず、肝心の永続化Cookieはサポートされない。

static Map> cookies = new HashMap>(); 
private static void retrieveCookie(URL url) {
    cookieManager = new CookieManager();
    CookieHandler.setDefault(cookieManager);
    CookieHandler handler = CookieHandler.getDefault();
    cookies = handler.get(url.toURI(), cookies);
}
.... 
retrieveCookie(new URL("http://d.hatena.ne.jp/Kazzz/"));
....
アプリケーションを停止すると取得したCookieは保存期間に関わらず消えてしまう

結局は自らCookieシリアライズする必要があるのだが、これに関しては、かの「Java in the Box」の櫻庭さんがITProへの記事で非常に詳しく採りあげているので、これを参考にするのがよさそうだ。(Cookieシリアライズ自体に問題がありそうだが)

「Java SE 6完全攻略」第42回 Cookieを扱う その3 - ITpro > Development >Java技術最前線

がしかし、普通にシリアライズされた永続化Cookieの読み書きの参照実装を入れなかったのは何故なのだろう。セキュリティホールの原因になることを回避?(永続化クッキーのメカニズムを実装すべきではない? ) ブラウザ依存する実装だから? はなはだ疑問だ。

追記:とはいえ、.NETもIEのCoookieストアから永続Cookieを引っ張り出してくるにはWindows APIの力を借りる必要がある。( InternetGetCookie


※櫻庭さんが寄稿された一連のJava 6の記事は非常に貴重で参考になる。
Java技術最前線/櫻庭祐一 - ITpro > Development >Java技術最前線