|
||||||||||||||||||
|
ホーム > Google Account との連携方法 > GWT での Google App Engine のユーザー認証の実装例 GWT での Google App Engine のユーザー認証の実装例GWT から Google App Engine の Google Accounts 認証を利用するときは、GWT RPC を組み合わせると簡単です。 ログイン GWT RPC の作成GWT の client パッケージに次の内容を LoginInfo.java として作成します。パッケージ名は適当に変えてください。
package com.appspot.mywebfeeds.client;
import java.io.Serializable;
@SuppressWarnings("serial")
public class LoginInfo implements Serializable {
private boolean loggedIn = false;
private String loginUrl;
private String logoutUrl;
private String email;
private String nickname;
public boolean isLoggedIn(){
return loggedIn;
}
public void setLoggedIn(boolean loggedIn){
this.loggedIn = loggedIn;
}
public String getLoginUrl(){
return loginUrl;
}
public void setLoginUrl(String loginUrl){
this.loginUrl = loginUrl;
}
public String getLogoutUrl(){
return logoutUrl;
}
public void setLogoutUrl(String logoutUrl){
this.logoutUrl = logoutUrl;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
public String getNickname(){
return nickname;
}
public void setNickname(String nickname){
this.nickname = nickname;
}
}
GWT の client パッケージに、LoginService インターフェイスを作ります。(LoginService.java)
package com.appspot.mywebfeeds.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath("login")
public interface LoginService extends RemoteService {
public LoginInfo login(String requestUri);
}
Async インターフェイスを作ります (LoginServiceAsync.java)。
package com.appspot.mywebfeeds.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface LoginServiceAsync {
public void login(String requestUri, AsyncCallback<LoginInfo> async);
}
サーバー側の LoginService の実装を作ります。GWT server パッケージに、LoginServiceImpl.java とします。
package com.appspot.mywebfeeds.server;
import com.appspot.mywebfeeds.client.LoginInfo;
import com.appspot.mywebfeeds.client.LoginService;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
@SuppressWarnings("serial")
public class LoginServiceImpl extends RemoteServiceServlet implements
LoginService {
public LoginInfo login(String requestUri) {
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
LoginInfo loginInfo = new LoginInfo();
if(user!=null){
loginInfo.setLoggedIn(true);
loginInfo.setEmail(user.getEmail());
loginInfo.setNickname(user.getNickname());
loginInfo.setLogoutUrl(userService.createLogoutURL(requestUri));
}
else{
loginInfo.setLoggedIn(false);
loginInfo.setLoginUrl(userService.createLoginURL(requestUri));
}
return loginInfo;
}
}
上記を作成して、web.xml は次のように設定します。 <servlet> <servlet-name>loginService</servlet-name> <servlet-class>com.appspot.mywebfeeds.server.LoginServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginService</servlet-name> <url-pattern>/mywebfeeds/login</url-pattern> </servlet-mapping> 上記のログインサービスの実装はほぼ決まりきったものになります。 » GWT RPC - LoginService (gwt-appengine-user-service.zip) 1.9 KB ログイン GWT RPC の利用上記のログイン GWT RPC を利用するクライアント例は次のようになります。
package com.appspot.mywebfeeds.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
public class Mywebfeeds implements EntryPoint {
private LoginInfo loginInfo = null;
private VerticalPanel loginPanel = new VerticalPanel();
private VerticalPanel mainPanel = new VerticalPanel();
private Label loginLabel = new Label("Please sign in to your Google Account.");
private Anchor signInLink = new Anchor("Sign in");
private Anchor signOutLink = new Anchor("Sign out");
public void onModuleLoad() {
LoginServiceAsync loginService = GWT.create(LoginService.class);
loginService.login(
GWT.getHostPageBaseURL(),
new AsyncCallback<LoginInfo>(){
public void onFailure(Throwable error){
}
public void onSuccess(LoginInfo result){
loginInfo = result;
if(loginInfo.isLoggedIn()){
loadMain();
}
else{
loadLogin();
}
}
}
);
}
protected void loadLogin() {
signInLink.setHref(loginInfo.getLoginUrl());
loginPanel.add(loginLabel);
loginPanel.add(signInLink);
RootPanel.get("main").add(loginPanel);
}
protected void loadMain() {
mainPanel.add(new HTML("<h1>Welcome!</h1>"));
signOutLink.setHref(loginInfo.getLogoutUrl());
mainPanel.add(signOutLink);
RootPanel.get("main").add(mainPanel);
}
}
ホストページは次の用に記載してあります。 <!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link type="text/css" rel="stylesheet" href="Mywebfeeds.css"> <title>My Web Feeds</title> <script type="text/javascript" language="javascript" src="mywebfeeds/mywebfeeds.nocache.js"></script> </head> <body> <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe> <noscript> <div> Your web browser must have JavaScript enabled in order for this application to display correctly. </div> </noscript> <div id="main"></div> </body> </html> ホーム > Google Account との連携方法 > GWT での Google App Engine のユーザー認証の実装例 |
|
||||||||||||||||
|
© 2010 Google Web Toolkit (GWT) 入門 |
||||||||||||||||||