SAStruts(Super Agile Struts)あれこれ

ATOMRSS

2-3 会員かどうか判断しよう

目次

  • 2-3-0 事前準備
  • 2-3-1 概要
  • 2-3-2 サンプルの説明
  • 2-3-3 サンプルのポイント
  • 2-3-4 サンプルの使い方
  • 2-3-5 ファイル構成
  • 2-3-6 サンプルの画面遷移と画面情報の入出力
  • 2-3-7 設定ファイル(1)
  • 2-3-8 設定ファイル(2)
  • 2-3-9 認証検証用のアクションメソッドを追加
  • 2-3-10 認証成功画面


内容

2-3-0 事前準備

「2-2 会員登録をしよう」をベースにします。


2-3-1 概要

会員制のWebサイトの場合は、会員である人のアクセスかそうでないかを識別するために認証を行う必要があります。 この節では、前の節で登録した会員情報を利用して、会員の認証を行います。認証は個々に作りこむことも多いですが、ここでは、Webアプリケーションの仕様で決められている汎用的な方法で認証を行います。SAStrutsアプリケーションもWebアプリケーションの1つなので、同じ方法を使用できます。

前の節のサンプルに対して、認証機能を追加します。MemberActionアクションのonlyメソッドには、Basic認証を行ってuserというロールを持つユーザーだけがアクセスできるように設定します。

元ネタではJSPファイルに対してアクセス制限をかけるようにしていますが、SAStrutsでは基本的にブラウザからJSPを直接リクエストすることはないので、アクションメソッドに対するアクセス制限を行うようにしています。

401(認証エラー)画面
supersample2-3_1.jpg

認証成功画面(only.jsp)
supersample2-3_2.jpg

Basic認証とは、次のようなダイアログが表示され、ユーザ名とパスワードの入力を促し、その情報で認証する方法です。
supersample2-3_3.jpg
このユーザー名とパスワードで認証された場合は、このユーザーにロールが割り当てられます。

アクセスされたアクションメソッドに対する権限をそのロールが持っている場合は、アクセスできます。本サンプルのユーザー名は、「2-2 会員登録をしよう」で登録した会員のメールアドレスです。メールアドレスとパスワードをBasic認証のダイアログに入力することで、保護されたアクションメソッドにアクセスできます。

2-3-2 サンプルの説明

MemberActionクラスのonlyメソッドが保護されているアクションメソッドです。ブラウザからonlyメソッドにアクセスすると、TomcatがBasic認証を要求します。認証に成功し、そのユーザーがuserというロールを持っていると、only.jspが表示されます。それ以外の場合は401ステータスコードをブラウザに戻します。

2-3-3 サンプルのポイント

・会員の認証をどのように行わせるか。 ・保護したアクションメソッドに対してどのユーザーがアクセスできるかという権限を設定する方法 ・認証されたユーザーがどのような権限を持っているかを取得するためのサーブレットAPI ・認証の設定はアプリケーションサーバーに依存します。 ・権限の設定はアプリケーションサーバーに依存しません。

■認証と権限

認証情報入力方式web.xmlの<login-config>
認証リポジトリserver.xmlの<realm>
認証情報Tomcatが管理していて、サーブレットAPIで取得できる
権限管理web.xmlの<security-constraint>
というように認証、権限管理の設定は、web.xmlおよびserver.xmlでできます。

2-3-4 サンプルの動かし方

サンプルはあらかじめ用意していないので、以降の項目を参照にして、自分で作成しなければいけません。

2-3-5 ファイル構成

今回、作成、自動生成、もしくは変更するファイルを以下に示します。
ファイル名種別作成/自動生成/変更
server.xmlTomcat設定ファイル変更
web.xmlWebアプリ設定ファイル変更
MemberForm.javaActionFormクラス変更
only.jspJSP作成


2-3-6 サンプルの画面遷移と画面情報の入出力



2-3-7 設定ファイル(1)

1.web.xml

<web-app>の子要素として以下の設定を追加します。
    <security-constraint>
        <web-resource-collection>
        <web-resource-name>Members Only</web-resource-name>
        <url-pattern>/member/only</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>user</role-name>
        </auth-constraint>
    </security-constraint>
    
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>Members Only</realm-name>
    </login-config>
    
    <security-role>
        <role-name>user</role-name>
    </security-role>


1)<security-constraint>タグ
保護するリソースの設定は、<web-resource-collection>タグで行います。子要素である<web-resource-name>タグは、リソースに対する名前を定義します。このリソースがどこにあるものを指しているかは、<url-pattern>タグを用いてURLパターンによって指定します。また、このリソースにアクセスできるロールは<auth-constraint>タグの子要素である<role-name>タグで指定します。ここでは、MemberActionのonlyメソッドに対してuserというロールを持つユーザーのみがアクセスできるように設定しています。

2)<login-config>タグ
<login-config>タグによって認証情報の入力方式を設定します。方式は以下の4種類があります。
認証方式設定内容説明
Basic認証(HTTP基本認証)BASICダイアログに入力されたID、パスワードで認証を行う
Digest認証DIGESTID、パスワードをMD5でダイジェスト化して送信し、その情報を利用して認証を行う
Form認証FORMフォーム情報としてID、パスワードを送信し、その情報を利用して認証を行う
クライアント証明書認証CLIENT-CERTクライアント証明書によって認証を行う
本サンプルではBASIC認証を設定しています。

3)<security-role>タグ
Tomcatに設定しているユーザーは複数のアプリケーションで利用されているので、このWebアプリケーションで利用するロールをここで指定しています。1)で指定した<role-name>タグのロールは、ここで指定したものでなければなりません。2)において認証を行い、成功すると付与されるロールです。



2-3-8 設定ファイル(2)

server.xmlはTomcatの設定ファイルで、Tomcatのインストールフォルダ下のconfフォルダに格納されています(ここでは、C:\xampp\tomcat\conf)。この中のRealmに関する設定が認証にかかわる部分で、認証リポジトリの設定が行われます。今回は、データベース(JDBC)をリポジトリとします。

■JDBCRealmの設定
以下のように設定することで、前節で作成した会員テーブルと役割テーブルを利用できます。先ず、Tomcatのインストール時のserver.xmlを見てみましょう。Realmの設定が以下のようにされています(Tomcat6の場合)。

      <!-- This Realm uses the UserDatabase configured in the global JNDI
           resources under the key "UserDatabase".  Any edits
           that are performed against this UserDatabase are immediately
           available for use by the Realm.  -->
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>


↑の設定は使用しませんのでコメントアウトして、以下の設定を追加しましょう。
      <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
          driverName="com.mysql.jdbc.Driver"
          connectionURL="jdbc:mysql://localhost:3306/sastruts"
          connectionName="sastruts" connectionPassword="sastruts" digest="MD5"
          userTable="Member" userNameCol="mail" userCredCol="password"
          userRoleTable="roles" roleNameCol="role" />


■属性
driverNameJDBCドライバ名
connectionURLコネクションURL
connectionNameMySQLにアクセスするためのユーザID
connectionPasswordMySQLにアクセスするためのパスワード
digest前節の会員テーブルでは、パスワードをMD5のダイジェストとして格納しています。デフォルトでは平文として認証するので、格納されているものがMD5のダイジェストであることをTomcatに知らせる設定を行います。
userTableユーザ情報を格納するテーブル名
userNameColユーザIDに対応する列名
userCredColパスワードに対応する列名
userRoleTableロール情報を格納するテーブル名
roleNameColロールに対応する列名


■TomcatへのJDBCドライバのインストール
いままでは、Connect/J(MySQLのJDBCドライバ)はWebアプリケーションに内包されていました(WEB-INF/libフォルダに格納することでWebアプリケーションから利用できていました)。今回のサンプルではTomcatが直接アクセスできる必要があるので、Tomcatのライブラリフォルダ(ここでは、C:\xampp\tomcat\lib)にJDBCドライバをコピーしておく必要があります。

2-3-9 認証検証用のアクションメソッドを追加

"supersample2-2\src\main\java\sample\action\MemberAction.java"に以下のメソッドを追加しましょう。
    @Execute(validator = false, roles = "user")
    public String only() {
        return "only.jsp";
    }


2-3-10 認証成功画面

認証成功画面のJSPを作成します。"supersample2-2\src\main\webapp\WEB-INF\view\member\only.jsp"ファイルを以下の内容で作成します。
<%@page contentType="text/html; charset=UTF-8" %>
<HTML>
    <BODY>
        <H4>getRemoteUser()で取り出す</H4><BR>
        あなた(<%= request.getRemoteUser() %>)はメンバーです。<BR>
        <H4>getPrincipal()で取り出す</H4><BR>
        あなた(<%= request.getUserPrincipal().getName() %>)はメンバーです。<BR>
        <H4>isUserInRole()で取り出す</H4><BR>
        あなたのロールとしてuserは<%= request.isUserInRole("user") %>(trueなら持っている)<BR>
        あなたのロールとしてvipは<%= request.isUserInRole("vip") %>(trueなら持っている)<BR>
    </BODY>
</HTML>




アップロードしたファイル

プレゼン公開・共有サイト handsOut.jp チーム・マイナス6% - みんなで止めよう温暖化

基本情報

ソースコードID:
597
登録者:
台北猫々
登録日時:
2008/07/30 13:42
最終更新日時:
2009/05/08 22:46
登録ページ数:
106
アクセス数:
83978
タグ:
java mysql json ajax hello sastruts ページング サンプル フレームワーク データベース トークンチェック テンプレート flex validwhen s2jdbc dolteng jaxb リセット s2jdbc-gen 自動生成 一括登録 super agile struts ria tiles 一括更新 jsonic エンティティ
編集権限:
ログインユーザ全員
ブックマーク:
  • codeなにがしブックマークに追加する 0 users
  • このページをはてなブックマークに追加
  • このページを del.icio.us に追加

GoodJob

  • GoodJob
  • 1668

GJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJ

GJGJGJGJGJGJGJGJ

編集者一覧

  • 台北猫々

GoodJobしたユーザ

  • ikdk
  • NAT
  • mikeda
  • うさうさ
  • こてつ
  • greennoah
  • とむよん
  • icofit
  • teshimasa4
  • tamr
  • T[]HAL

ブックマークコメント