3

Tomcat で 2 つのレルムをセットアップしようとしていますが、何らかの理由でそれができません。管理作業 (Web アプリケーションのデプロイなど) には標準の UserDatabaseRealm (conf/tomcat-users.xml) を使用したいのですが、特定の Web アプリケーションの認証にはカスタム領域が必要です。

だから、私はこれを私のwebappのコンテキストに入れてみました:

<Context>
  <GlobalNamingResources>
    <Resource name="CustomDatabase" auth="Container"
      type="org.apache.catalina.UserDatabase"
      description="User database that can be updated and saved"
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
      pathname="/usr/java/apache-tomcat-6.0.35/conf/tomcat-users.xml" 
    />
  </GlobalNamingResources>
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
    resourceName="CustomDatabase"
   />
</Context>

これは実際には server.xml にあるもののコピーにすぎず、いくつかの変更が加えられています。

  • 名前は、UserDatabase から CustomDatabase に変更されます。

  • パス名は絶対パス名です (メイン レルムにも同じものを使用します)。

私はいつもこの同じエラーを受け取ります:

LifecycleException:  No UserDatabase component found under key CustomDatabase

そして、私はそれが私に何を言っているのかわからない。それはどのコンポーネントについて話しているのですか?

上記のコンテキストに加えて、他にもいくつか試しましたが、常に同じエラーが発生します。

  • Resource を GlobalNamingResources タグでラップしてみましたが、同じエラーがあるかどうかはわかりません。

  • Resource の auth 属性を Container と Application の両方に変更しようとしましたが、同じエラーが発生しました。

私は何が欠けていますか?Google からのすべてのヘルプは、ほとんどの人がメインのレルム (私の場合は問題ありません) を台無しにしており、2 番目のレルムを構成しようとはしていません。

4

2 に答える 2

1

ですから、本当の答えはありませんが、私が何をしたかを説明します。

2 番目の UserDatabaseRealm を機能させることはできませんでしたが、実際にはテスト用に 2 つのレルムが必要であり、タイプは問題ではありませんでした (最終的に、2 番目のレルムは LDAP になります)。

そこで、使用可能なレルムを調べて、2 次テスト レルムに MemoryRealm を選択したところ、本来の動作をするようになりました。次に、それをLDAPレルムにしましたが、それもうまくいきました。

したがって、実際に 2 つの UserDatabaseRealms が必要な方には申し訳ありませんが、解決策はありません。

注: UserDatabaseRealm が JNDI を使用し、JNDIRealm が LDAP に使用されているのは奇妙です (そして、私が知る限り、JDNI は関与していません)。これは従来の命名の問題に過ぎないと確信していますが、紛らわしいです。

于 2012-10-19T17:52:11.383 に答える