私たちの 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 アプリケーションに直接パッケージ化して、FormAuthenticator
Web アプリケーションを開始する前に単一のバージョンをロードする必要がないことは可能ですか? これにより、必要な数の Web アプリケーションのバージョンを開始することができ、まったく触れません%CATALINA_HOME%/lib
。
つまり、Tomcat がホーム ライブラリ ディレクトリからではなく、Web アプリケーションからカスタム認証モジュールを取得するようにするにはどうすればよいでしょうか? ありがとう。