lepidolite-core (0.1.1) | 2008-07-20 21:33 |
lepidolite-dao (0.2.1) | 2009-05-10 21:16 |
レルムとは、WebアプリケーションがユーザIDとパスワードで認識するユーザのコレクションです。
web.xmlやcontext.xmlに設定を記述するだけで、Webブラウザのダイアログを使用するBasic認証や独自のログイン画面を使用するForm認証などを使用する事が出来ます。
認証のためのデータベースにはJDBC接続, データソース, JNDIなどを選択できます。
認証されたユーザに対して、Webアプリケーションが定義するユーザ追加機能, マスタ管理機能などの権限を個別に複数設定できます。
設定によって、データベースにはパスワードのMD5, SHA1などのダイジェスト値を使うようにする事が出来ます。 ユーザのパスワードがどのような文字列であるかを、データベース管理者にもわかりにくくする事が出来ます。
request.getRemoteUser()でユーザIDを取得できます。
request.isUserInRole(String)でログイン中のユーザがある権限を持っているかチェックする事が出来ます。
トップページ以外のURLに対して直接アクセスされても、認証を要求した上で処理を継続できます。
直接アクセス時の処理の流れ
以下、Apache Tomcat 5.5でレルムを使用する場合の手順を紹介します。
ユーザID, パスワードが格納されているデータベースへアクセスするためにJDBC接続, データソースを使用する場合は、 ${Tomcatのインストールフォルダ}/commons/libにJDBCドライバをコピーする。
Tomcat5ではTomcat4以前のようにContext要素をserver.xmlファイルに直接記述する事は推奨されていません。 Webアプリケーション固有の設定は、META-INF/context.xml内に記述して配備する事が出来ます。
<Context docBase="lepidolite" path="/lepidolite" reloadable="true"> <Resource name="jdbc/lepidolitedb" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/lepidolite" username="scott" password="tiger" maxActive="20" maxIdle="10" maxWait="-1" /> <Realm dataSourceName="jdbc/lepidolitedb" localDataSource="true" className="org.apache.catalina.realm.DataSourceRealm" userTable="users" userNameCol="user_id" userCredCol="passwd" userRoleTable="accounts" roleNameCol="role_name" digest="SHA1" /> </Context>
<web-app> <security-constraint> <display-name>Protected Area</display-name> <web-resource-collection> <web-resource-name>Protected Area</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>*</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/WEB-INF/jsp/login.jsp</form-login-page> <form-error-page>/error/401.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>member</role-name> </security-role> </web-app>
データベース使用時、レルムが参照する認証情報は2つのテーブルからなっています。
同一ネットワーク内の盗聴は簡単に行えます。 社内WebアプリケーションだとしてもSSLを使用しなければ、パスワードは簡単に盗まれ、なりすましがしやすくなってしまいます。
ユーザの認証, 権限付与を行うのはログイン時です。 ログイン中のユーザに対して権限を変更しても、反映されるのは次回のログイン時です。