2012-09-08 43 views
5

私のサイトにログオンできるユーザーは、MySQLデータベースからロードされることを希望します。そのために、私はApache Tomcat 7アプリケーションサーバーのJDBCRealmを設定したいと思っています。Apache Tomcat 7でJDBCRealmを設定する方法は?

私はdocumentationを読んで、JNDIリソース(jdbc/foo4)を使用してデータベース接続を作成しました。このリソースは動作します(私はデータを取得するために私のアプリケーションで既に使用しています)。どちらがうまくいかないかは、このリソースとの領域のリンクです。

マイコンフィギュレーション・ファイルは次のようになります。私の標準デプロイメント・ディスクリプタでの

メインの\ webappの\ SRC \ META-INF \のcontext.xmlに

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/my-webapp"> 
    <!-- works! --> 
    <Resource name="jdbc/foo4" 
      type="javax.sql.DataSource" 
      factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/foo4" 
      username="root" 
      password="root" 
      maxActive="8" 
      maxIdle="4" 
      maxWait="10000" 
      auth="Container" 
      /> 
    <!-- Does not seem to work?! --> 
    <Realm className="org.apache.catalina.realm.DataSourceRealm" 
     dataSourceName="jdbc/foo4" 
     userTable="users" 
     userNameCol="user_name" 
     userCredCol="user_pass" 
     userRoleTable="user_roles" 
     roleNameCol="role_name"/> 
</Context> 

私は次のように入力された:

src \ main \ webapp \ WEB-INF \ web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <security-constraint> 
    <display-name>General Restriction</display-name> 
    <web-resource-collection> 
     <web-resource-name>Entire Application</web-resource-name> 
     <description>All resources in this application are protected.</description> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>admin</role-name> 
    </auth-constraint> 
    </security-constraint> 
    <login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>Administration Area</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> 
    <security-role> 
    <role-name>admin</role-name> 
    </security-role> 
    <resource-ref> 
    <res-ref-name>jdbc/foo4</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 
</web-app> 

そして私は、サンプルのユーザー作成するには、このSQLスクリプトを使用:テーブルのユーザー(USER_NAMEのVARCHAR(15)NOT NULL主 キー、user_passのVARCHAR(15を作成

security.sql

を)not null);

テーブルuser_roles(USER_NAMEのVARCHAR(15)NOT NULL、
ROLE_NAMEのVARCHAR(15)NOT NULL、主キー(USER_NAME、 ROLE_NAME))を作成します。

ユーザー(user_name、user_pass)のINSERT VALUES( 'benny'、 'test'); INSERT INTO user_roles(user_name、role_name)VALUES( 'benny'、 'admin');

しかし、私はユーザー "benny"とパスワード "test"でログインできません。ユーザー "tomcat"とパスワード "tomcat"(%CATALINA_HOME%\ conf \ tomcat-users.xmlに定義されているため)でログインできますが、MySQLデータベースから自分のユーザーでログインできません。

私のTomcatサーバーはMySQLドライバを使用しています(%CATALINA_HOME%\ libに "mysql-connector-java-5.1.9.jar"を入れました)。

I Iがログインしようとすると、次のエラーメッセージが表示されます。

Sep 08, 2012 7:38:55 PM org.apache.catalina.realm.DataSourceRealm open 
Exception performing authentication 
javax.naming.NameNotFoundException: Name [jdbc/foo4] is not bound in this Context. Unable to find [jdbc]. 

誰かがエラーを見ていますか?

答えて

11

レルムはデフォルトで常にグローバルデータソース(/conf/server.xmlのTomcat側で設定されています)を探しますが、ローカルデータソース(webapp側では全く同じに設定されています)を定義しているため、データソースを探します。 localDataSource属性をtrueに設定する必要があります。

<Realm ... localDataSource="true" /> 

Tomcat 7.0 Realm documentationを参照してください。

localDataSource

レルムはコンテキスト要素の中にネストされている場合、この本は、レルムがコンテキストのために定義されたデータソースを使用することができますではなく、グローバル情報元。指定しない場合、デフォルトはfalseです。グローバルデータソースを使用します。

+0

ありがとうございました。それが解決策でした!それは今働く。 :-) –

+0

ようこそ。 – BalusC

+0

@BalusCこの返信は今私には関係がありませんが、あなたはJEEの王です。尊敬!!すべての苦労のためにありがとう。 –

関連する問題