Security 如何让javax.crypto类(如javax.crypto.Cipher)在jboss的servlet上工作?

Security 如何让javax.crypto类(如javax.crypto.Cipher)在jboss的servlet上工作?,security,servlets,encryption,jce,jboss7.x,Security,Servlets,Encryption,Jce,Jboss7.x,我的应用程序验证许可证文件以使其正常工作。它通过调用javax.crypto.Cipher.getInstance(“DES”,“SunJCE”)来破译许可证密钥文件 当我在本地运行应用程序时,一切正常,但当我使用jboss部署应用程序并在servlet上验证许可证文件时,会出现以下错误: java.lang.SecurityException: JCE cannot authenticate the provider SunJCE at javax.crypto.Cipher.getIns

我的应用程序验证许可证文件以使其正常工作。它通过调用javax.crypto.Cipher.getInstance(“DES”,“SunJCE”)来破译许可证密钥文件

当我在本地运行应用程序时,一切正常,但当我使用jboss部署应用程序并在servlet上验证许可证文件时,会出现以下错误:

java.lang.SecurityException: JCE cannot authenticate the provider SunJCE
  at javax.crypto.Cipher.getInstance(DashoA13*..)
  at javax.crypto.Cipher.getInstance(DashoA13*..)
正如我所说,它可以在命令提示符和eclipse中正常工作,但不能作为jboss上的servlet。有人知道我需要做什么吗?我使用的是JDK1.6和JBossAS7


谢谢

我们想到了几个可能的问题,当sun/oracle jvm尝试验证提供程序JAR时,类路径似乎有问题

  • 检查所有安全JAR是否位于运行jboss的jvm的
    /jre/lib/ext
    下 (即US_export_policy.jar、sunjce_provider.jar、local_policy.jar……)

  • 关于US_export_policy.jar和local_policy.jar请确保下载了无限制版本

  • /jre/lib/security
    中的java.security文件:确保有一行类似于
    security.provider.X=com.sun.crypto.provider.SunJCE
    ,其中X是一个数字

  • 确保sunJCE提供程序jar不在WEB-INF/lib中


我发现我的代码出了什么问题。在代码的前面部分,出于某种原因,有人执行了以下操作:

if (SunJCEinProviders) 
{
Security.removeProvider("SunJCE");
}   

int i = Security.insertProviderAt(new  com.sun.crypto.provider.SunJCE(),1);

因此,出于某种原因,我们删除了Java最初的SunJCE提供者,然后添加了一个新的提供者,而这个新提供者未能通过身份验证。

Sun Microsystems Inc.的Java版本1.6.0\u 26。有两件事:1)我如何判断我们的导出策略.jar和本地策略.jar是否不受限制?我只有下载Java时附带的版本。2.)如果sunJCE_provider.jar不在我的WEB-INF/lib目录中,那么我会得到以下错误:Servlet wfwebservice的Servlet.service()抛出异常:java.lang.ClassNotFoundException:com.sun.crypto.provider.sunJCE from[Module”deployment.cm.war:main“from service Module Module Loader]