Webで出回っているサンプルを見ているとOpenid4javaのConsumerManagerはアプリケーションでシングルトンで持つと良いとのことなので、とりあえず、コンシューママネジャーのラッパーをシングルトンで実装
public class ConsumerManagerWrapper { private static ConsumerManager _instance; private ConsumerManagerWrapper(){ // コンストラクタを封印 } public static ConsumerManager getInstance(){ try { if(_instance == null){ _instance = new ConsumerManager(); } } catch (ConsumerException e) { throw new RuntimeException("ConsumerManagerの生成に失敗"); } return _instance; } }
次にイベント時のOpenIDでログインの処理。今回は「はてな」を対象にしてみる。はてなは、OpenIDでログインする場合、[http://www.hatena.ne.jp/ + ログインID + /]を指定する。最後はスラッシュで終わっていることに注意!下のコードは本来必要なチェックなど行わずに最小限のコードになっています。適宜チェックは行ってください。
private void onClickLogin(){ String loginid = "nigredo"; // 画面のテキストボックスから取得するといいでしょう。 String fowardurl = "http://www.hatena.ne.jp/" + loginid + "/"; // 多くのサンプルでは画面で入力させる項目です。 // コンシューママネジャを取得 ConsumerManager manager = ConsumerManagerWrapper.getInstance(); // フォワード先を設定 List discoveries = manager.discover(fowardurl); DiscoveryInformation discovered = manager.associate(discoveries); String returnURL = "http://arcanum.jp/"; //とりあえず、返送URLを設定 AuthRequest authReq = manager.authenticate(discovered, returnURL); // はてなのログイン処理にフォワード getRequestCycle().setRequestTarget(new RedirectRequestTarget(authReq.getDestinationUrl(true))); }
今回ははてなのログイン処理まで行ければいいので、とりあえず、ログインした後の返送URLは自分のドメインのトップを指定しています。これが本来はべリファイを行うためのURLを指定します。Wicketの場合は、ブックマーク可能ページの絶対URLになるはずです。ちなみにこの場合、はてなでログイン処理が終わった後、指定したhttp://arcanum.jp/を表示します。
これで、やっとこさはてなまでは飛ばすことができた。次はべリファイ処理を行うつもり。
今日はここまでできたので寝る。