私はこの問題について過去 3 週間頭を悩ませてきましたが、ソース コードがないため、できるだけ簡単に説明するように努めています。
- プラットホーム
. トムキャット 7
. ウィンドウ サーバー 2008
。JRE 7
- Tomcat JAAS レルムの使用
Web アプリケーション META-INF/context.xml で定義されます。
<Context>
<Realm className="org.apache.catalina.realm.JAASRealm" appName="ABC" userClassNames="com.abc.xyz" useContextClassLoader="true"/>
- ソースコードを持っていないので、ここが難しい部分です。
WEB-INF/classes/a123 & b123 クラス ファイルがあります。
. このクラス a123 は logincontext を使用します
。logincontext には、いくつかの構成が定義されています
。この構成ファイルは、b123 にアクセスするために必要な JAAS レルムの一部であると私は信じています。
問題。クラス b123 が見つかりません。
この問題は、Tomcat JAAS レルムが Tomcat サーバー上にあり、b123 が webappsclassloader の下にあるため、b123 が見つからないことが原因だと思います。
したがって、context.xml でわかるように、useContextClassLoader="true" を設定しました。これは、デフォルトで webappsclassloader であると考えています。
b123 を Tomcat スタートアップ クラスパスに配置しようとしましたが、これは機能しますが、b123 のコピーが 2 つあると思います。
. Tomcat サーバーの下の b123
。webappsclassloader の下の b123
ここでの問題は、クラス読み込み階層の上位クラスが下位階層の Web アプリ クラスにアクセスしようとしていると思います。クラスローディングの委譲が機能する方法に基づいて、それは間違いなく失敗します。したがって、どちらが機能するかを考える唯一の方法は、スレッドコンテキストクラスローダーを使用することです。
context.xml でわかるように、useContextClassLoader を「true」に設定しました。しかし、ソース コードにアクセスできないため、Tomcat 構成を介してコンテキスト クラス ローダーを設定するにはどうすればよいでしょうか? JAAS レルムがコンテキスト クラス ローダーを使用する前に、コンテキスト クラス ローダーを設定する必要があると思います。
どんな助けでも素晴らしいでしょう!