6

最初に環境について説明しましょう。

環境: -mac os x(javaビルド1.6.0_35-b10-428-11M3811)-apache tomcat 7.0.30-mysql 5.5.27 --tomcat / lib-> mysql-connector-java-5.1.22-bin.jar

JDBCRealmを正常に実装しましたが、実稼働環境で推奨されているため、DataSourceRealmに切り替えたいと考えています。フォームベースの認証を使用します。

ここで説明されていることはすべて 行いました:http: //tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#DataSourceRealm およびここ: http ://tomcat.apache.org/tomcat-7.0-doc/jndi- datasource-examples-howto.html#MySQL_DBCP_Example

server.xml

<Realm className="org.apache.catalina.realm.LockOutRealm">
     <Realm className="org.apache.catalina.realm.DataSourceRealm" 
            dataSourceName="jdbc/proto" digest="SHA-256" roleNameCol="role" 
            userCredCol="password" userNameCol="name" userRoleTable="roles" 
            userTable="users"/>
</Realm>

context.xml

<Resource auth="Container" 
          driverClassName="com.mysql.jdbc.Driver" 
          maxActive="100" maxIdle="30" maxWait="10000" 
          name="jdbc/proto" password="proto" type="javax.sql.DataSource" 
          url="jdbc:mysql://localhost:3306/proto" username="proto"/>

WEB-INF / web.xml

<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/proto</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

ユーザー名とパスワードを送信すると、次の例外が発生します。

Sep 18, 2012 9:38:32 PM org.apache.catalina.realm.DataSourceRealm open
SEVERE: Exception performing authentication
javax.naming.NameNotFoundException: Name [jdbc/proto] is not bound in this Context. Unable to find [jdbc].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.catalina.realm.DataSourceRealm.open(DataSourceRealm.java:394)
at org.apache.catalina.realm.DataSourceRealm.authenticate(DataSourceRealm.java:285)
at org.apache.catalina.realm.CombinedRealm.authenticate(CombinedRealm.java:146)
at org.apache.catalina.realm.LockOutRealm.authenticate(LockOutRealm.java:180)
at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:295)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:450)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)

それがMac固有の問題であるかどうかをテストするために、別のOSで環境をセットアップしようとはしていません。

私が逃した提案はありますか?私はあなたの助けに感謝します!ありがとうございました。

4

4 に答える 4

6

GlobalNamingResources でリソースを宣言しないようにするには、Realm に localDataSource="true" を配置します。

于 2012-11-23T13:02:12.420 に答える
3

この場合、レルム (この場合はサーバー レベルで宣言されています) がネーミング リソースjdbc/proto (この場合は Web アプリケーション レベルで宣言されています) を使用しようとしていることが原因だと思います。

これが私が理解しているのは、Javaサーバーのコンテキスト階層です

  1. サーバ
  2. ホスト
  3. WebApplication Context (server.xml または META-INF Context.xml にある可能性があります)
于 2012-10-28T20:50:18.053 に答える
1

実際、これ[jdbc/proto]は ProjectName.xml のようなプロパティとして言及されています

<ResourceLink global="jdbc/proto" name="jdbc/proto"/>

そのため、ProjectName.xml ファイルが存在し tomcatInstances/ServerName/conf/Catalina/localhost/ProjectName.xml 、このリソース リンクがあり、例外がなくなっていることを確認してください。

私も同じ問題に直面し、アプリケーションのローカルコンテキストファイルが何らかの理由で場所から削除されたことがわかりました

tomcatInstances/ServerName/conf/Catalina/localhost/ProjectName.xml 

ファイルを元に戻して完了しました...現在は正常に機能しています。これが誰かの助けになることを願っています。

于 2014-05-05T09:38:49.420 に答える
0

私の場合、問題は、pom.xml に競合する依存関係があることでした。私の場合、それはjava-naming依存関係でした。Tomcat の名前付けライブラリと競合する名前付けの依存関係/jar がないことを確認してください。

削除した後、問題はなくなりました(あなたと同じ環境です)。

于 2012-09-23T01:10:11.517 に答える