- PR -

tomcat5でのDB認証について

1
投稿者投稿内容
やまと
常連さん
会議室デビュー日: 2004/02/20
投稿数: 25
投稿日時: 2004-04-03 02:28
いつもお世話になっています。
tomcat5について質問があります。

tomcatとDBを連携させた認証なのですが、
まず
@webアプリのweb.xmlで
コード:
 <security-constraint>
  <web-resource-collection>
   <web-resource-name>Protected Area</web-resource-name>
   <url-pattern>/*</url-pattern>
   <http-method>DELETE</http-method>
   <http-method>GET</http-method>
   <http-method>DELETE</http-method>
   <http-method>PUT</http-method>
  </web-resource-collection>   
  
  <auth-constraint>
   <role-name>api_user</role-name>
  </auth-constraint>  
  
 </security-constraint>  
 
 <login-config>
  <auth-method>FORM</auth-method>
  <realm-name>api</realm-name>
  
  <form-login-config>
   <form-login-page>/login.jsp</form-login-page>
   <form-error-page>/error.jsp</form-error-page>
  </form-login-config>
 </login-config> 
 


でしていし、

Aserver.xmlで
[code]
<!-- enable below-->
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/api"
connectionName="api" connectionPassword="api"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name" />
<!-- end avobe -->
とする。

Blocalhostのdbに
コード:
mysql> select * from users;
+-----------+-----------+
| user_name | user_pass |
+-----------+-----------+
| api       | api       |
+-----------+-----------+

と
mysql> select * from user_roles;
+-----------+--------------+
| user_name | role_name    |
+-----------+--------------+
| api       | api_user     |
+-----------+--------------+


を作成。
これでよいと思いますが、
tomcat5を起動すると以下の警告が出ます。
コード:
情報: 警告: <security-role>に定義されていないセキュリティロール名 api_user が<auth-constraint>の中で使用されました
2004/04/03 2:07:53 org.apache.catalina.core.StandardHost getDeployer



そのせいで認証ができないと思いますが、tomcat4では、
同じ方法で認証ができました。
なぜでしょうか?

@のweb.xmlの最後に
コード:
<security-role>  
<role_name>api_user</role_name>
</security-role>  


としましたがだめでした。(tomcatでは意味ないとのことでしたが。。。)
教えていただけますでしょうか?
よろしくお願いします。

長々した説明で恐縮です。。。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-06-02 13:21
たまたま同じ問題にぶち当たり、Googleで検索していてこのスレッドを発見しました。
ちょっと時間が空きましたが参考まで。

引用:

やまとさんの書き込み (2004-04-03 02:28) より:
@のweb.xmlの最後に
コード:
<security-role>  
<role_name>api_user</role_name>
</security-role>  


としましたがだめでした。(tomcatでは意味ないとのことでしたが。。。)



ほんとうは <role-name> のところ、<role_name> とタイプミスしているからではないでしょうか。
当方ではこれでWarningは解決しています。

ついでに関連する質問をさせてもらいます。

Tomcatでロール定義をする場合、どのタイプのレルムを使っても情報を二重に定義しなければならないものなのでしょうか?

・DBとweb.xml
・tomcat-users.xmlとweb.xml

メンテが手間なので1箇所で管理したいのですが、どなたかよい方法をご存知でないでしょうか?
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-06-02 14:34
引用:

Tomcatでロール定義をする場合、どのタイプのレルムを使っても情報を二重に定義しなければならないものなのでしょうか?

・DBとweb.xml
・tomcat-users.xmlとweb.xml

メンテが手間なので1箇所で管理したいのですが、どなたかよい方法をご存知でないでしょうか?



1 箇所で管理できる事に意味があるのか解かりませんが、
ロールの配り方で、同じ様な効果にする事が出来るのではないでしょうか。

例えば、あるウェブアプリに一意の文字列 aaa を割り当てる。
aaa が必要とするロールが 3 つある場合、先の文字列と足して、
aaa1, aaa2, aaa3 というロールを作り、それをコード中と web.xml に
記述する。

あとは、誰にどのロールを配るかを気にするだけなので、
DB の情報のみ管理すれば良いとなります。

他にも、やりかたはありますけど。


[ メッセージ編集済み 編集者: はしもと 編集日時 2004-06-02 14:35 ]

[ メッセージ編集済み 編集者: はしもと 編集日時 2004-06-02 14:46 ]
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-06-02 15:16
はしもとさん、毎度どうもありがとうございます。
おかげ様で問題がクリアになりました。

ロールとロール割り当ての間の参照整合性を保つためには、「ロールマスタ」をDBに作らなければ、と考えていたので、それがDBとweb.xmlとで同じ情報の二重持ちになるという点を問題視していました。
(常にDBとweb.xmlを同期させなければならない点)

DBに参照整合性制約さえ定義しなければ、「ロールマスタ」をDBに作る必要なし、ということで、確かにはしもとさんのおっしゃる通りですね。

んー、アプリで整合性確保するか・・・
1

スキルアップ/キャリアアップ(JOB@IT)