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>