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 定义了一些配置
。我相信这个配置文件是 JAAS 领域的一部分,需要访问 b123。

问题。找不到类 b123。

我相信这个问题是Tomcat JAAS领域在Tomcat服务器上并且找不到b123,因为b123在webappsclassloader下。

所以你可以在我的 context.xml 中看到,我确实设置了 useContextClassLoader="true",我认为默认情况下它是 webappsclassloader。

我尝试将 b123 放在当时可以工作的 Tomcat 启动类路径中,但现在我相信我有 2 个 b123 副本。

. Tomcat服务器下的b123
。webappsclassloader下的b123

我认为这里的问题是类加载层次结构中较高的类试图访问较低层次结构中的 Web 应用程序类。根据类加载委托的工作方式,这肯定会失败。所以我能想到的唯一方法是使用线程上下文类加载器。

正如您在 context.xml 中看到的那样,我确实将 useContextClassLoader 设置为“true”。但是由于我无权访问源代码,如何通过 Tomcat 配置设置上下文类加载器?我猜想在 JAAS 领域使用上下文类加载器之前需要设置上下文类加载器。

任何帮助都会很棒!

4

0 回答 0