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技術最前線