Googleアカウントによるユーザー認証 (2/5)
作成:2010-05-10 15:08
更新:2010-05-10 18:35
更新:2010-05-10 18:35
■ログインチェック用フィルタークラスの作成
では、実際にUserServiceを利用してログインシステムを作ってみましょう。ここでは、ログインチェックを行うフィルタークラスを作り、これを利用してログインしているかどうかを調べるようにしましょう。
下にソースコードを掲載します。ここでは、LoginCheckFilterというクラスとして作成をしています。ここではdoFilterで、ユーザーがログインしているかどうかをチェックし、していなければログインページにジャンプしています。ログインしている場合には、現在のユーザーを示すUserインスタンスをセッションのアトリビュートに保管しています。(まぁ、ここでは特に使わないんですが、こういう具合にログインした情報をセッションで管理すればいいだろう、という例として考えてください)
なお、ここではセッションを利用していますが、デフォルトではGAE/Jはセッションの利用ができません。利用できるようにするためには、appengine-web.xmlにそのための設定情報を追記してやる必要があります。
appengine-web.xmlを開くと、その中に<appengine-web-app>というタグが記述されています。この中に、<sessions-enabled>というタグを追記してください。このタグでtrueを設定しておくと、このWebアプリケーションでセッションが利用可能となります。
ここでは、UserServiceFactory.getUserServiceでUserServiceインスタンスを取得した後、「isUserLoggedIn」を使ってログインしているかどうかをチェックしています。そして、ログインしている場合には、getCurrentUserの値をセッションに保管します。
ログインしていない場合は、createLoginURLでログインページのアドレスを取得し、sendRedirectでリダイレクトしています。このcreateLoginURLは、引数に、ログイン後の表示ページのアドレスを渡して呼び出します。このようにすることで、ログインページに移動してログインが完了した後、そのページに自動的に移動できるようになります。
ここではフィルターとしてクラスを用意していますので、request.getRequestURIで現在のページのアドレスを取得し、ログイン後にはそこにそのまま戻るようにしています。
下にソースコードを掲載します。ここでは、LoginCheckFilterというクラスとして作成をしています。ここではdoFilterで、ユーザーがログインしているかどうかをチェックし、していなければログインページにジャンプしています。ログインしている場合には、現在のユーザーを示すUserインスタンスをセッションのアトリビュートに保管しています。(まぁ、ここでは特に使わないんですが、こういう具合にログインした情報をセッションで管理すればいいだろう、という例として考えてください)
なお、ここではセッションを利用していますが、デフォルトではGAE/Jはセッションの利用ができません。利用できるようにするためには、appengine-web.xmlにそのための設定情報を追記してやる必要があります。
appengine-web.xmlを開くと、その中に<appengine-web-app>というタグが記述されています。この中に、<sessions-enabled>というタグを追記してください。このタグでtrueを設定しておくと、このWebアプリケーションでセッションが利用可能となります。
※doFilterの処理の流れ
ここでは、UserServiceFactory.getUserServiceでUserServiceインスタンスを取得した後、「isUserLoggedIn」を使ってログインしているかどうかをチェックしています。そして、ログインしている場合には、getCurrentUserの値をセッションに保管します。
ログインしていない場合は、createLoginURLでログインページのアドレスを取得し、sendRedirectでリダイレクトしています。このcreateLoginURLは、引数に、ログイン後の表示ページのアドレスを渡して呼び出します。このようにすることで、ログインページに移動してログインが完了した後、そのページに自動的に移動できるようになります。
ここではフィルターとしてクラスを用意していますので、request.getRequestURIで現在のページのアドレスを取得し、ログイン後にはそこにそのまま戻るようにしています。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※LoginCheckFilter.javaのソースコード
package jp.tuyano;
import java.io.IOException;
import java.security.Principal;
import javax.servlet.*;
import javax.servlet.http.*;
import com.google.appengine.api.users.*;
public class LoginCheckFilter implements Filter {
@Override
public void init(FilterConfig conf) throws ServletException {}
@Override
public void doFilter(ServletRequest req,
ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
UserService service = UserServiceFactory.getUserService();
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
HttpSession session = request.getSession();
if (service.isUserLoggedIn()){
session.setAttribute("user", service.getCurrentUser());
} else {
session.removeAttribute("user");
String url = request.getRequestURI();
String loginurl = service.createLoginURL(url);
response.sendRedirect(loginurl);
}
chain.doFilter(request, response);
}
@Override
public void destroy() {}
}
※appengine-web.xmlへの追記
<sessions-enabled>true</sessions-enabled>
※関連コンテンツ
「Google App Engine for Java(GAE/J)プログラミング入門」に戻る