GAE/JでGoogleアカウントを使う(Userオブジェクト)
先のログ「GAE/JでGoogleアカウントを使った認証を実装する」に登場した、UserServiceオブジェクト(APIドキュメント)を使うと、User(APIドキュメント、英文のAPIの方が少しだけ詳しい)というオブジェクトが取得できる。サンプルを少しだけ修正して、画面に表示してみた。
プロジェクトの作成
先のログ「GAE/JでGoogleアカウントを使った認証を実装する」で作成したプロジェクトをコピーする。バージョンなどを変えたければ、プロジェクトを右クリックし、「Google => App Engine Settings ...」で変更する。
サーブレットの作成
先のログと同様にサーブレットで処理をする。コードは以下のようにした。
GaeLogin2Servlet.java
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.User; 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(); User usr = userService.getCurrentUser(); String thisURL = request.getRequestURI(); response.setContentType("text/html; charset=utf-8"); if (request.getUserPrincipal() != null) { response.getWriter().println("<p>こんにちは、" + usr.getNickname() + "さん <a href=\"" + userService.createLogoutURL(thisURL) + "\">ログアウト</a>.</p><br><br>"); response.getWriter().println("<table border=1>"); response.getWriter().println("<tr><th>getAuthDomain</th>"); response.getWriter().println("<td>"+usr.getAuthDomain()+"</td></tr>"); response.getWriter().println("<tr><th>getEmail</th>"); response.getWriter().println("<td>"+usr.getEmail()+"</td></tr>"); response.getWriter().println("<tr><th>getNickname</th>"); response.getWriter().println("<td>"+usr.getNickname()+"</td></tr>"); response.getWriter().println("<tr><th>getUserid</th>"); response.getWriter().println("<td>"+usr.getUserId()+"</td></tr>"); response.getWriter().println("<tr><th>Hashcode</th>"); response.getWriter().println("<td>"+usr.hashCode()+"</td></tr>"); response.getWriter().println("</table>"); } else { response.sendRedirect(userService.createLoginURL(thisURL)); } } }
index.html
これはそのままにしておく。初期画面は以下となって、リンクをクリックすると認証処理に引っかかる。
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Hello App Engine</title> </head> <body> <h1>Hello App Engine!</h1> <table> <tr> <td colspan="2" style="font-weight:bold;">Available Servlets:</td> </tr> <tr> <td><a href="gaelogin"/>GaeLogin</td> </tr> </table> </body> </html>
web.xml
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>GaeLogin</servlet-name> <servlet-class>test.GaeLogin2Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GaeLogin</servlet-name> <url-pattern>/gaelogin</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
デプロイ
以上ができたら、GAE/Jにデプロイする。