ログインして表示されるページ
では、続いてindex.gspを作成しましょう。これは、ログインしていると表示されるようにしておきます。次のようにソースコードを記述しましょう。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Grails Helo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style type="text/css">
h1 {background:#AAAAFF; font-size: 12pt; padding: 3px;}
h2{font-size: 12pt; font-weight: bold;}
p{color:#000066; font-size:10pt;}
</style>
</head>
<body>
<h1>Grails Auth</h1>
<div>
<auth:user property="login" />
</div>
<h2>This is Index Action Page.</h2>
これは、ログインしなければ見られないページです。
</body>
</html>

このページ自体は、いわばダミーですのでごく普通のWebページでいいのですが、それだけでは面白くないのでちょっとした仕掛けを入れておきました。<auth:user property="login" />というのがそれです。
<auth:user>というタグは、ログインしているユーザーに関する情報を表示するためのものです。property="login"と属性を指定することで、ログインIDを出力することができます。現在、何というユーザーIDでログインしているか、これで表示できます。
AuthControllerの作成
では、コントローラーを作成しましょう。「controllers」に自動生成されているAuthController.groovyを開き、次のように修正してください。
class AuthController {
def authenticationService
def index = {
if (!authenticationService.isLoggedIn(request)) {
response.sendError(403)
}
}
def login = { }
}
これで完成です。ここでは、authenticationServiceというフィールド、そしてindexとloginのアクション用のクロージャが用意されています。最初のauthenticationServiceという変数は、Authenticationによって提供される認証機能に関する「AuthenticationService」というクラスのインスタンスです。この変数名をクラス内に用意することで、自動的にauthenticationServiceオブジェクトが利用可能になります。
indexクロージャでは、このauthenticationServiceに用意されている「isLoggedIn」というメソッドを利用しています。これはログインされているかどうかを調べ真偽値を返すもので、引数にはrequestが指定されます。この返値がtrueならばログインしており、falseならばしていないことを示します。
ログインしていない場合には、403のサーバーエラーを発生させています。これはresponseの「sendError」で行うことができます。これは引数に指定したエラー番号のサーバーエラーを発生させるものです。
では、実際にloginアクションにアクセスしてログインを行ってみましょう。ログインすればindexが表示されますが、ログインに失敗するとサーバーエラーになります。

ログインの送信先は?
それにしても、コントローラーを見てみても、ログインに関する処理は何もありません。これを見て、「どこでログイン処理をしているんだ?」と疑問に思ったかもしれません。その疑問は、loginアクションにアクセスし、表示されるフォームのソースコードを調べると氷解します。先に、<auth:form>タグで記述されたフォームは、実際には次のようなHTMLソースコードにレンダリングされていることが分かります。
<form action="/gapp/authentication/login" method="post" > <input type="hidden" name="success_controller" value="auth" id="success_controller" /> <input type="hidden" name="success_action" value="index" id="success_action" /> <input type="hidden" name="error_controller" value="auth" id="error_controller" /> <input type="hidden" name="error_action" value="login" id="error_action" />
フォームは、/gapp/authentication/loginに送信されています。これは、Authenticationプラグインによって自動的に用意されるauthenticationコントローラのloginアクションに送信されているのです。その際、成功時とエラー時の挙動に関する情報も、<input type="hidden">によって受け渡されていることが分かります。
Authenticationプラグインを組み込むと、このようにAuthenticationというコントローラーが用意され、そこに必要な処理を行うためのアクションが用意されます。それらアクションを実行することで、認証に関する処理が行われていたのです。
