Twitter4jでOAuth認証

Twitter4jでOAuth認証を行う例です。
SAStrutsでの例ですが、他のフレームワークでも基本は一緒です。

CONSUMER_KEYとCONSUMER_SECRETは、事前に取得しておく必要があります。
Twitterの"My Application"登録 - おかひろの雑記
CallbackURLはプログラム中で指定しますが、アプリケーション設定の方にも入れておかないとうまくいかないようです。

	/**
	 * Twitter認証の準備と認証画面にリダイレクト
	 * @return
	 */
	@Execute(validator=false)
	public String login() throws Exception
	{
		Twitter twitter = new TwitterFactory().getInstance();
		twitter.setOAuthConsumer(CONSUMER_KEY,CONSUMER_SECRET);
		
		// コールバックURLを生成
		String callbackURL = request.getRequestURL().toString().replaceAll(".do","/callback");
		// RequestTokenを取得
		RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL);
		
		// RequestTokenをセッションに保存しておく
		session.setAttribute("RequestToken",requestToken);
		
		// Twitter認証画面にリダイレクト
		response.sendRedirect(requestToken.getAuthorizationURL());
		
		return null;
	}
	
	/**
	 * Twitter認証からコールバックされる処理
	 * @return
	 */
	@Execute(validator=false)
	public String callback()throws Exception
	{
		// oauth_verifierを取得
		String oauthVerifier = request.getParameter("oauth_verifier");
		
		if(oauthVerifier == null)
		{
			session.invalidate();
			return "index.jsp";
		}
		
		Twitter twitter = new TwitterFactory().getInstance();
		twitter.setOAuthConsumer(CONSUMER_KEY,CONSUMER_SECRET);
		// セッションに保存しておいたRequestTokenを取得
		RequestToken requestToken = (RequestToken)session.getAttribute("RequestToken");
		// RequestTokenとoauth_verifierにより認証
		twitter.getOAuthAccessToken(requestToken,oauthVerifier);
		
		// セッションにログイン情報を登録
		session.setAttribute("loginTwitter",twitter);
		
		return "index?redirect=true";
	}
	
	/**
	 * ログアウト
	 * @return
	 */
	@Execute(validator=false,redirect=true)
	public String logout()
	{
		session.invalidate();
		
		return "index";
	}

JSPは手抜きですがこんな感じで。

<body>
	<c:if test="${loginTwitter == null }">
		<a href="login">ログイン</a>
	</c:if>
	<c:if test="${loginTwitter != null }">
		ようこそ${f:h(loginTwitter.screenName) }さん。
		<a href="logout">ログアウト</a>
	</c:if>
</body>

Twitterインスタンスをセッションに保存して使っていますが、別にDTOとかを作成した方がいいのかもしれません。