JDBCレルム認証で権限管理
『Executeアノテーションでつけられるroles属性によって、ユーザのロールによってアクセス制御をかけることができる』ということは、
マニュアルを見れば一目瞭然なのですが、DBを使ってユーザー認証をした後にロールをどうやってセットすればよいのかが分かりませんでした。
調べた結果、自分でセットできるものではなく、サーブレットコンテナに任せた認証を使う必要があるとのこと。
しかし、今までのアプリの認証は全て自前でカスタムしたものばかりで、
「サーブレットコンテナの認証って何?」
という状態だったので、チュートリアルの設定をみたり、ブログをあさってみたりと手探り状態で、
答えにたどり着くまでに随分時間がかかってしまいました。 orz
JDBCレルムを使った認証というのがあるんですね。全く知りませんでした。
[参照]http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/realm-howto.html
自分のようにその存在を知らない方のために、取っ掛かりにでもなればと思い、やった手順をざっくりですがメモしておきます。
-
-
- まずテーブルは「ユーザー表」「ユーザーロール表」の2つが必要です。「ユーザー表」にはログイン名とパスワード用の列、「ユーザーロール表」にはログイン名とロール名用の列が必要です。
- TOMCAT_HOME/conf/server.xml にJDBCレルムの設定を記述します。
のコメントアウトをはずし、データベースの情報、JDBCドライバ、認証に使うテーブルの情報などを設定します。デフォルトで有効となっていた の設定はコメントアウトします。 - TOMCAT_HOME/common/libにJDBCドライバのjarファイルを入れます。
- 続いてログイン画面とログインエラー時の画面を用意します。ログイン画面のformのactionは"j_security_check"、ログイン名・パスワードのinputタグのname属性はそれぞれ"j_username"、"j_password"とする必要があります。
- あとはweb.xmlに認証が必要なURLのパターンやログイン画面の場所などを設定するのですが、これはSAStrutsのチュートリアルのweb.xmlを見たら分かると思います。
タグや タグの設定です。
-
1〜3の話は上記のTomcatのページを見れば詳しく載っています。4、5もググれば参考になる情報はたくさんあります。
欲を言えば、この辺の認証まわりの話はマニュアルにもうちょっと書くか、参考URLへのリンクを貼っておいてもらいたかったなぁ(八つ当たり)。
常識過ぎて必要ないんですかね。