Scala on GAE/Jでアカウント認証(1)
最近Scalaという関数型言語の勉強を始めました。
まだ言語の持つパワーについて知るところは少ないですが、何ができるのかと今からワクワクしています。
今回はGoogle App Engine for JavaとGoogleの提供しているサービスの一つ、アカウント認証機能を使ってログイン・ログアウトをするだけのアプリケーションをScalaで書いてみました。
オペレーションとしては、以下のような感じになります。
- アプリケーショントップページにGoogleアカウント認証機能へのリンク
- リンクをクリックすると認証ページに遷移、手持ちのGoogleアカウントでログインする
- ログインに成功すれば"master"ディレクトリ配下に移動
- ログアウトをするとアプリケーショントップページに戻る
以下ソース。
LoginController.scala
package jp.tantack.nasg.controller import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; import javax.servlet.http.{HttpServlet , HttpServletRequest => HSReq , HttpServletResponse => HSResp} class LoginController extends HttpServlet { override def doGet(req : HSReq, resp : HSResp) = { var service : UserService = UserServiceFactory.getUserService(); var url : String = service.createLoginURL("/master/index.jsp"); resp.sendRedirect(url); } }
LogoutController.scala
package jp.tantack.nasg.controller import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; import javax.servlet.http.{HttpServlet , HttpServletRequest => HSReq , HttpServletResponse => HSResp} class LogoutController extends HttpServlet { override def doGet(req : HSReq, resp : HSResp) = { var service : UserService = UserServiceFactory.getUserService(); var url : String = service.createLogoutURL("/index.jsp"); resp.sendRedirect(url); } }
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>Login</servlet-name> <servlet-class>jp.tantack.nasg.controller.LoginController</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <servlet> <servlet-name>Logout</servlet-name> <servlet-class>jp.tantack.nasg.controller.LogoutController</servlet-class> </servlet> <servlet-mapping> <servlet-name>Logout</servlet-name> <url-pattern>/logout</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
index.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <html> <head> <title>アプリケーショントップページ</title> </head> <body> <p><a href="/login">ログインするよ!</a></p> </body> </html>
/master/index.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <html> <head> <title>ログイン後トップページ</title> </head> <body> <p>ログインしたよ!</p> <p><a href="/logout">ログアウトするよ!</a></p> </body> </html>
内部的にはJavaサーブレットで動いているので、書き方もJavaのWebアプリケーションと同じですね。
実際に動かすためには、以下のような手順を踏みます。
- JDKを入手。
- Scalaを入手。
- 統合開発環境のEclipseを導入。
- Google Plugin for Eclipseを導入。
- Scala IDE for Eclipseを導入。
- Eclipseで新規GAE/Jプロジェクトを作成。
- できたプロジェクトの"/war/WEB-INF/lib"配下に、Scalaに含まれてる"scala-library.jar"を突っ込む。
- GAE/Jプロジェクトに「Scalaネイチャー」を付与する
- 拡張子".scala"のファイルが無事コンパイルされることを確認したら環境はOK!
- 小躍りしながら実装!実装!!
かなり端折った気もしますが、こんな感じです。
不備等があればガンガン突っ込んで下さい。