1

私たちの Web アプリケーションには、特定のロジックを内部に持つカスタム フォーム認証が必要です。現在のフォーム オーセンティケーターの実装では、オーセンティケーター モジュールを と呼びましょう、Web アプリケーションが開始する前にcustom.auth.jar存在する必要があります。Web アプリケーションは、次のディレクティブ%CATALINA_HOME%/libを使用してそのカスタム認証モジュールを使用します。context.xml

<Valve className="foo.bar.CustomAuth" characterEncoding="UTF-8"/>

Tomcat の要件を理解している限り、このモジュールは、Web アプリケーションが開始する前custom.auth.jarに Tomcat のlibディレクトリに存在する必要があります。これは、Web アプリケーションが Web アーカイブにパッケージ化された認証コードを必要としないように見えるためです。%CATALINA_HOMA%/lib. そうしないと、Web アプリケーションを起動できません。

SEVERE: Parse error in context.xml for /webapp
java.lang.ClassNotFoundException: foo.bar.CustomAuth

認証ビジネス ロジックの詳細といくつかの保護のために、認証モジュールの何らかのバージョン管理を導入し、Web アプリケーション アプリケーション リスナーでそのバージョンを確認する必要がありました (Web アプリケーションが互換性のないバージョンの認証モジュールを検出した場合)。 (Tomcat のライブラリ ディレクトリにある JAR ファイルをチェックするのではなく、代わりにリフレクションを使用します) -- 起動しようとしている Web アプリケーションと認証モジュールとの間の互換性エラーの報告を開始することを単に拒否します。ここでも、既存のオーセンティケータ モジュールを で指定する必要がありますcontext.xml

互換性のないバージョンを保護するにもかかわらず、これはいくつかの大きな問題を引き起こします。これら 2 つのアプリケーションは異なるバージョンの認証モジュールを必要とするため、同じ Tomcat インスタンスで同じアプリケーションの別のバージョンを起動することはできません。libただし、Tomcat のディレクトリには単一のバージョンが存在する場合があります。

私の質問は、カスタムFormAuthenticatorを Web アプリケーションに直接パッケージ化して、FormAuthenticatorWeb アプリケーションを開始する前に単一のバージョンをロードする必要がないことは可能ですか? これにより、必要な数の Web アプリケーションのバージョンを開始することができ、まったく触れません%CATALINA_HOME%/lib

つまり、Tomcat がホーム ライブラリ ディレクトリからではなく、Web アプリケーションからカスタム認証モジュールを取得するようにするにはどうすればよいでしょうか? ありがとう。

4

1 に答える 1

2

Valveクラスは、webapp クラス ローダーによってロードできません。この質問に対する答えを見てください。

バージョン管理の問題の解決策として、CATLINA_BASE 環境変数をオーバーライドして別の Tomcat インスタンスを開始することを検討してください。別の CATALINA_HOME と CATALINA_BASE での実行は、Tomcat ディストリビューションにある RUNNING.txt ファイルに記載されています。実際の構成例を共有することもできます。

于 2013-01-21T22:31:57.050 に答える