私のサイトにログオンできるユーザーは、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].
誰かがエラーを見ていますか?
ありがとうございました。それが解決策でした!それは今働く。 :-) –
ようこそ。 – BalusC
@BalusCこの返信は今私には関係がありませんが、あなたはJEEの王です。尊敬!!すべての苦労のためにありがとう。 –