ユーザ権限でコンテンツへのアクセスを制限するJavaTips 〜JSP/サーブレット編

» 2003年11月18日 10時00分 公開
[山田祥寛@IT]

 「アクセス制限をweb.xmlの記述だけで設定する」「フォーム認証でログイン画面をカスタマイズする」でもご紹介したように、サイトに簡単に認証機能を追加することが可能です。

 ただし、多くのアプリケーションでは単に認証の可否を判断するのみならず、ユーザーロール(役割)ごとに個々のページに対するアクセスの可否を判断したいというケースが少なくありません。例えば、あるワークフローアプリケーションであれば、帳票の作成はユーザー権限をさえ持っていればできるが、帳票の承認はマネージャ権限がなければできないというようなケースです。

 本稿では、そのようなロール単位でページの動作を制御する方法を紹介することにします。

解説

 以下のauth.jspを作成し、「/アプリケーションルート/auth」フォルダ配下に保存します。「/アプリケーションルート/auth」フォルダには、「アクセス制限をweb.xmlの記述だけで設定する」もしくは「フォーム認証でログイン画面をカスタマイズする」の設定に従って、認証設定がなされているものとします。

auth.jsp
<%@ 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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。