「アクセス制限をweb.xmlの記述だけで設定する」「フォーム認証でログイン画面をカスタマイズする」でもご紹介したように、サイトに簡単に認証機能を追加することが可能です。
ただし、多くのアプリケーションでは単に認証の可否を判断するのみならず、ユーザーロール(役割)ごとに個々のページに対するアクセスの可否を判断したいというケースが少なくありません。例えば、あるワークフローアプリケーションであれば、帳票の作成はユーザー権限をさえ持っていればできるが、帳票の承認はマネージャ権限がなければできないというようなケースです。
本稿では、そのようなロール単位でページの動作を制御する方法を紹介することにします。
解説
以下のauth.jspを作成し、「/アプリケーションルート/auth」フォルダ配下に保存します。「/アプリケーションルート/auth」フォルダには、「アクセス制限をweb.xmlの記述だけで設定する」もしくは「フォーム認証でログイン画面をカスタマイズする」の設定に従って、認証設定がなされているものとします。
<%@ page contentType="text/html;charset=Shift_JIS" %> <% if(!request.isUserInRole("admin")){ out.println("本ページへのアクセスは認められていません"); out.close(); } %> <html> <head> <title>管理者専用画面</title> </head> <body> 管理者専用画面です。 </body> </html>
HttpServletRequest#isUserInRoleメソッドは、現在のユーザーが引数に指定されたロールを持っているかどうかを検出します。つまり、上の例の場合には、カレントユーザーがadmin権限を持っていない場合、処理を直ちに中止し、エラーメッセージを表示します。
ただ単に一文を表示するのでなく、カスタムのエラー画面にリダイレクトしたり、HttpServlertResponse#sendErrorメソッドでエラーステータスを返すというような方法もあるでしょう。例えば、以下のようにです。
response.sendError(HttpServletResponse.SC_FORBIDDEN);
Copyright © ITmedia, Inc. All Rights Reserved.