GAE/JでGoogleアカウントを使った認証を実装する
GAE/Jでは、Googleアカウントを使って簡単に認証処理を実装できるそうだ。ということで、試してみた。論より証拠。
GAEのマニュアルにサンプルコードが載っているが、これをコピペしてもつまらないので、以下のように改造する。
- 日本語でメッセージをだす。
- ログインしていなかったら、ログインページへリダイレクトする。(マニュアルにredirectもサポートしている、と書いてあるので)
本当に簡単にできてしまったので、以下にメモしておく。
サンプル
まず、以下のトップ画面をだす。
ここでリンクをクリックすると、(ログインしていないので)「Googleの普通のログイン画面」がでる。
ログインをすると以下の画面に遷移して、ログインしたメイルアドレスを表示する。ここで、ログアウトをクリックすると、上のGoogleのログイン画面に遷移する。
サーブレットの作成
プロジェクトの作成と同時に、index.htmlとサーブレットができる。index.htmlはそのままにしておいて、サーブレットを次のように改造する。
HttpServletRequestに定義されているgetUserPrincipal()を利用してAuthenticateされたユーザー情報を取得している。こんな簡単なコードで書けてしまうのはすごい!!
package test; import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; @SuppressWarnings("serial") public class GaeLogin2Servlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { UserService userService = UserServiceFactory.getUserService(); String thisURL = request.getRequestURI(); response.setContentType("text/html; charset=utf-8"); if (request.getUserPrincipal() != null) { response.getWriter().println("<p>こんにちは、" + request.getUserPrincipal().getName() + "さん <a href=\"" + userService.createLogoutURL(thisURL) + "\">ログアウト</a>.</p>"); } else { response.sendRedirect(userService.createLoginURL(thisURL)); } } }