arcanum_jp’s blog

おっさんの日記

openid4java with Wicket その2


 昨日に引き続き、WicketOpenIDを使うテスト。

 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/を表示します。


 これで、やっとこさはてなまでは飛ばすことができた。次はべリファイ処理を行うつもり。


 今日はここまでできたので寝る。