Java 与应用程序隔离的WildFly9 JASPI模块
我正在尝试创建一个与EAR应用程序完全隔离的定制JASPIServerAuthModule。它依赖于SpringFramework 2.5.5的旧版本。我正在运行WildFly 9.0.2.Final 我定义了一个适当的安全域:Java 与应用程序隔离的WildFly9 JASPI模块,java,spring,jboss,wildfly-9,jaspic,Java,Spring,Jboss,Wildfly 9,Jaspic,我正在尝试创建一个与EAR应用程序完全隔离的定制JASPIServerAuthModule。它依赖于SpringFramework 2.5.5的旧版本。我正在运行WildFly 9.0.2.Final 我定义了一个适当的安全域: <security-domain="sample"> <authentication-jaspi> <login-module-stack name="..."> <login-mod
<security-domain="sample">
<authentication-jaspi>
<login-module-stack name="...">
<login-module code="..." flag="...">
<module-option name="..." value="..."/>
</login-module>
</login-module-stack>
<auth-module code="..." login-module-stack-ref="...">
<module-option name="..." value="..."/>
</auth-module>
</authentication-jaspi>
</security-domain>
然后,我将我的模块作为一个picketbox依赖项挂接
cat $WILDFLY/system/layers/base/modules/org/picketbox/main/module.xml
<module xmlnx="..." name="org.picketbox">
...
<dependency>
...
<module name="org.my.module" />
</dependency>
</module>
cat$WILDFLY/system/layers/base/modules/org/picketbox/main/module.xml
...
...
当我尝试部署一个通用的my app.ear
时,它将my app.war
与jboss web.xml
一起提供,指向“sample”安全域,它成功地找到了我想要的类,启动了JASPI生命周期,但是,当它开始创建Spring上下文和SpringBeans时,它落在myapp.ear.myapp.war
模块类加载器上,并且正如预期的那样没有找到类
ClassNotFoundException:com.my.module.ClassX来自服务模块加载器的[module“deployment.my app.ear.my app.war:main]
我不想在jboss deployment structure.xml
中添加com.my.module
作为依赖项。这样做可以使应用程序按预期工作。虽然我需要隔离
我的问题是:
- 可以从我的应用程序中隔离JASPI模块类吗
- 是否推荐这种方法(挂接为
dependency)org.picketbox
- 它是SpringFramework 2.5.5的限制吗?可能它使用的类加载器不是当前的线程类加载器李>
提前感谢。我找到了一本有趣的指南,它向我们解释了很多关于JBoss模块和类加载的问题 在这里: 它说TCCL在某些情况下可能是一种癌症 我发现旧式Spring2.5.5使用TCCL加载类并实例化其bean 为了纠正这种行为,我扩展了
ClassPathXmlApplicationContext
并重写了最初从TCCL(ClassUtils.getDefaultClassLoader
)获取的getClassLoader()
)
一切都开始工作,与主应用程序隔离。问题解决了
如果有人试图执行一些独立的模块实现,并出现奇怪的行为,我建议从底层框架开始怀疑。另一种将JASPIC模块(SAM)与应用程序隔离的方法是将其作为单独的war进行部署
这可以通过使用编程选项注册SAM来完成,但要为应用程序上下文ID传递一个
null
。然后SAM将可用于部署在同一服务器上的所有其他存档。如果这解决了您的问题,您应该检查✔ 在你的问题旁边。
cat $WILDFLY/system/layers/base/modules/org/picketbox/main/module.xml
<module xmlnx="..." name="org.picketbox">
...
<dependency>
...
<module name="org.my.module" />
</dependency>
</module>