【问题标题】:jboss 7 does not scan ext folder of jrejboss 7不扫描jre的ext文件夹
【发布时间】:2012-09-07 09:40:30
【问题描述】:

我有一个在 jboss 上运行的软件,它需要位于 jre/lib/ext 中的加密库。我得到以下异常:

Caused by: java.lang.ClassNotFoundException: com.sun.crypto.provider.SunJCE from [Module "deployment.myatrium-intranet-ear.ear.myatrium_intranet.jar:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)

我在此链接中尝试了以下解决方案:

http://www.liferay.com/it/community/wiki/-/wiki/Main/JBoss+AS7+tips/maximized#section-JBoss+AS7+tips-sunjce_provider.jar

但未能扫描 ext 文件夹。

真的处于绝望的境地。非常感谢您的帮助。

提前致谢

【问题讨论】:

  • 你是舒尔吗?也许你只是用不同的jdk(没有jce)开始jboss?或者问题可能出在安全设置中(java.policy、java、security、local_policy.jar)但我不相信 jboss 应该“扫描”jdk 中的 ext 文件夹。
  • @user1516873 当然 jboss 不应该扫描,除非你让它找到它,但我不知道该怎么做,没有很好的例子。
  • @dcernahoschi 链接没有损坏。
  • 我找到了另一个链接,它谈到了它,但对我不起作用:community.jboss.org/thread/196781
  • @user1516873 jre/lib/ext 不包含在 jboss 的类路径中。是的,测试在 jboss 之外运行良好。

标签: java cryptography jboss7.x jsf-1.2 seam2


【解决方案1】:

你理解错了。 JBoss 7 已迁移到完整的 OSGi。您需要将它们添加到引导委托。

它确实在类路径中加载了ext。问题是它应用了一个类过滤器(以防止您使用非标准类)。

如果您使用 ODBC 驱动程序 (sun.jdbc.odbc.*) 和其他 sun.* 类,则会出现同样的问题。您必须将其添加到引导授权/系统包中。 (这不是正确的方式。但是您似乎讨厌正确的方式,所以....)

查看这些页面了解详情:

【讨论】:

  • 您的回答非常有用,谢谢。那么你会建议的正确方法是什么?我的意思是,我必须通过复制它并从中创建一个模块来添加一个已与 jre 打包的库,这看起来真的很奇怪(我认为这就是你的意思是正确的方法,是吗?)。再次感谢
  • 正确的方法是创建一个像 dcernahoschi 这样的模块。但你似乎讨厌它。
【解决方案2】:

几个月前我遇到了一个非常相似的问题,似乎标准方法不起作用。

这个链接解决了我的问题:https://community.jboss.org/thread/175395

它谈到了bouncycastle 提供程序,但也应该适用于 sunjce_provider。

【讨论】:

  • sun jce 无法从 maven 实现,这家伙只是在展示如何使用 maven 获取提供程序。问题是晒太阳!
  • 没有。它与maven无关。您应该将 sunjce jar 从您的 lib/ext 目录复制到您在 modules 目录中手动创建的目录。
  • 我不想从 jre 复制 jar。相反,我希望所有 jre jar 以及这个 jar 都可用,因为它可用于 jboss 范围之外的所有其他应用程序。我觉得你的建议没有用,也不是答案。
  • 是否要复制 jar 取决于您,但这不是投反对票的理由。答案可能对其他人有用。或者您可能已在问题中指定您不想要这样的答案,因此没有人会浪费时间回答否决票。这不公平
【解决方案3】:

尝试输入以下内容:

Extension-List: crypto
crypto-Extension-Name: javax.crypto

在 WAR/classes/META-INF/MANIFEST.MF 中

通常在战争文件中,META-INF 位于战争的根目录中,如

WAR
├── WEB-INF
│   └── classes
└── META-INF   
    └── MANIFEST.MF 

以下内容似乎适用于 jboss 7.1.1 上的 liferay 6.1

WAR
└── WEB-INF
    └── classes
         └── META-INF
              └── MANIFEST.MF

【讨论】:

  • 其实我试过了,但没有成功。我发布的链接之一有这个例子。我想知道为什么它对我不起作用。
  • 老实说我不知道​​,你可能想在 jboss 社区论坛上询问(如果你还没有)
【解决方案4】:

它可以在 Jboss 7 中工作,只需指向 jar,使用 jboss-deployment-strcuture.xml 或清单条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2012-03-16
    • 2017-02-27
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    相关资源
    最近更新 更多