0

私はこの問題について過去 3 週間頭を悩ませてきましたが、ソース コードがないため、できるだけ簡単に説明するように努めています。

  1. プラットホーム

. トムキャット 7
. ウィンドウ サーバー 2008
。JRE 7

  1. Tomcat JAAS レルムの使用

Web アプリケーション META-INF/context.xml で定義されます。

<Context>    
    <Realm className="org.apache.catalina.realm.JAASRealm" appName="ABC" userClassNames="com.abc.xyz" useContextClassLoader="true"/>
  1. ソースコードを持っていないので、ここが難しい部分です。

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 レルムがコンテキスト クラス ローダーを使用する前に、コンテキスト クラス ローダーを設定する必要があると思います。

どんな助けでも素晴らしいでしょう!

4

0 に答える 0