CodeZine(コードジン)

特集ページ一覧

Google App Engine for Javaを使ってみよう!
(3)Google Accounts Java API

Google App Engine for Javaを使ってみよう! (3)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/04/28 14:00

目次

Google Accounts Java APIを使ってみよう!

 Google App Engineの「Google Accounts Java API」は、簡単にGoogle Accountsの認証機構をあなたのサービスに組み込むことができます。

 まずは、ログイン/ログアウトの処理をするソースコードを見てみましょう。

UserService userService = UserServiceFactory.getUserService(); // (1)
PrintWriter out = response.getWriter();
String thisURL = request.getRequestURI(); // (2)
Principal principal = request.getUserPrincipal(); // (3)
if (principal != null) {
    String urlLogout = userService.createLogoutURL(thisURL); //(4)
    out.println("<p>" + principal.getName() + "<a href=\"" + urlLogout + "\">ログアウト</a></p>");
} else {
    String urlLogin = userService.createLoginURL(thisURL); // (5)
    out.println("<p><a href=\"" + urlLogin + "\">ログイン</a></p>");
}
  1. UserServiceインスタンスを取得します。
  2. このサーブレットが実行されているウェブページのURIを取得します。
  3. このサーブレットにリクエストを出したプリンシパルを取得します(認証していない場合、null)。
  4. ログアウト用のGoogle AccountsのURLを取得します。
  5. ログイン用のGoogle AccountsのURLを取得します。

 (4)、(5)で取得できる「ログイン」や「ログアウト」のURLは「Google Accounts」の認証ページになっており、認証ページを含む、認証サービスのすべてを「Google Accounts」が肩代わりしてくれているのが分かります。開発者はUserServiceクラスから取得したGoogle AccountsのURLを利用することで、簡単にユーザを認証ページに誘導できます。

認証後にUserクラス経由で取得できる情報とメソッド名
目的 メソッド
認証ドメインの取得 getAuthDomain()
メールアドレスの取得 getEmail()
ニックネーム getNickname()
UserServiceから取得するGoogle AccountsのURL

 Google App Engine標準のappspot.comドメインで開発を進めて、後から独自ドメインにプログラムを移行する場合にも、UserServiceクラスのcreateLogoutURL()createLoginURL()から取得するURLは内部的に正しく動作するため、プログラムを修正することなくサービスの移行が可能です。

認証をローカルで実行してみる

com.daisukeyamashita.test.gaccountパッケージにあるGAccountTestServletを以下のように書き換えて下さい。

GAccountTestServlet クラス
package com.daisukeyamashita.test.gaccount;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.*;

import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

@SuppressWarnings("serial")
public class GAccountTestServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        UserService service = UserServiceFactory.getUserService();

        PrintWriter out = resp.getWriter();
        String thisURL = req.getRequestURI();
        if (req.getUserPrincipal() != null) {
            User user = service.getCurrentUser();
            out.println("<p>Google App Engine : " + req.getUserPrincipal().getName()
                    + " <a href=\"" + service.createLogoutURL(thisURL) + "\">logout</a></p>");
            out.println("isAdmin:" + service.isUserAdmin() + "<br />");
            out.println("domain:" + user.getAuthDomain() + "<br />");
            out.println("mail:" + user.getEmail() + "<br />");
            out.println("nickname:" + user.getNickname() + "<br />");
        } else {
            out.println("<p><a href=\"" + service.createLoginURL(thisURL) + "\">login</a></p>");
        }
    }
}

 これで認証サービスを実行する準備ができました。まずは、プログラムをEclipseから実行してローカルでの動きを確認します。

 前回と同じように、プロジェクト名を右クリックして、[Run As]-[Web Application]をクリックします。

 Consoleウィンドウに以下のように表示されればローカルサーバの起動が完了です。好きなブラウザで「http://localhost:8080/」にアクセスしてみましょう。

 [GAccountTestServlet]をクリックします。

 認証を開始するために、[login]をクリックします。

 以下のような、ローカルテスト用の認証ページが表示されます。この認証ページは、Google App Engine上で実行する時には、GMailなどと同じ「Google Accounts」の認証画面になります。ローカルテスト用の認証画面では、[Email:]に適当な文字列(メールアドレスでなくても良い)を入力し、[Log In]をクリックします。

 このように表示されていればOKです。一般ユーザとしてログインしたので、「isAdmin:false」と表示されていることを確認してください。次は、管理者としてログインしてみましょう。右上の[logout]をクリックしてログアウトします。

 [login]をクリックして認証ページに移動します。管理者としてログインするには、[Sign in as Administrator]にチェックを入れる必要があります。チェックが入っていることを確認して、[Log In]をクリックします。

 今度は、管理者としてログインしたので、「isAdmin:true」と表示されていることが確認できます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Google App Engine for Javaを使ってみよう!

もっと読む

著者プロフィール

  • 山下 大介(ヤマシタ ダイスケ)

    &nbsp;&nbsp;京都大学を中心とした、産官学共同プロジェクトのSOBAプロジェクトに参加後、同プロジェクトで開発したP2P配信によるVoIP技術を2005年に商業化。オープンソース、VoIP、P2P、クラウドコンピューティングに精通。趣味はGoogleの追っかけ。現在は、株式会社SOBAプロ...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5