ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 与应用程序隔离的WildFly9 JASPI模块

2019-07-02 10:50:06  阅读:250  来源: 互联网

标签:java spring jboss wildfly-9 jaspic


我正在尝试创建一个与我的EAR应用程序完全隔离的自定义JASPI ServerAuthModule.它取决于Spring框架2.5.5的遗留版本.我正在运行WildFly 9.0.2.Final.

我定义了一个合适的安全域:

<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>

然后为我的Auth-Module依赖项定义了一个自定义JBoss模块.

$WILDFLY/modules/com/my/module/main/module.xml
$WILDFLY/modules/com/my/module/main/spring-core-2.5.5.jar 
$WILDFLY/modules/com/my/module/main/etc.jar (..)

然后我把我的模块挂钩作为一个纠察线依赖.

cat $WILDFLY/system/layers/base/modules/org/picketbox/main/module.xml

<module xmlnx="..." name="org.picketbox">
   ...
   <dependency>
      ...
      <module name="org.my.module" />
   </dependency>
</module>

当我尝试使用指向“示例”安全域的jboss-web.xml来部署my-app.ear的my-app.ear时,它成功找到了我想要的类,启动了JASPI生命周期,但是当时它开始创建Spring Context和Spring Beans,它位于my-app.ear.my-app.war模块类加载器上,并且正如预期的那样找不到类.

ClassNotFoundException: com.my.module.ClassX from [Module “deployment.my-app.ear.my-app.war:main” from Service Module Loader]

我不想在jboss-deployment-structure.xml中添加com.my.module作为依赖项.这样做可以使应用程序按需运行.虽然我需要它孤立.

我的问题是:

>是否可以将JASPI模块类与我的应用程序隔离?
>这种方法(挂钩为org.picketbox依赖)是否推荐?
>它是Spring Framework 2.5.5的限制吗?也许它使用除当前线程类加载器之外的类加载器.

提前致谢.

解决方法:

我找到了一个有趣的指南,它解释了我们很多关于JBoss模块和类加载问题的内容.

这里:https://developer.jboss.org/wiki/ModuleCompatibleClassloadingGuide

它说TCCL在某些情况下可能是癌症.

我发现传统的Spring 2.5.5使用TCCL来加载类并实例化它的bean.

为了纠正这种行为,我扩展了ClassPathXmlApplicationContext并覆盖了最初来自TCCL(ClassUtils.getDefaultClassLoader)的getClassLoader().

一切都开始工作,与主应用程序隔离.问题解决了.

如果有人试图做一些孤立的模块实现并且得到奇怪的行为,我建议从你的底层框架开始怀疑.

标签:java,spring,jboss,wildfly-9,jaspic
来源: https://codeday.me/bug/20190702/1355433.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有