无法初始化类javax.crypto.SunJCE_b

时间:2014-01-08 11:48:15

标签: java tomcat ssl

我开发了一个Java servlet应用程序,在我开发的PC上,一切都按预期工作,包括使用SFTP以编程方式在端口8443等上使用HTTPS复制PDF并使用SSL证书。

但是,当我尝试在Live服务器上运行应用程序时,我收到错误;

java.lang.NoClassDefFoundError:无法初始化类javax.crypto.SunJCE_b

经过调查,有人建议检查jce.jar。但我确保jce.jar存在,并在我的项目中创建了一个“lib”文件夹,并将jar复制到那里并将jar放在我的构建路径上,但问题仍然存在。

我该如何解决这个问题?提前致谢。这是Tomcat启动应用程序后的控制台输出;

08-Jan-2014 10:45:44 org.apache.catalina.startup.Catalina start
INFO: Server startup in 12715 ms
08-Jan-2014 10:47:42 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor run
SEVERE: 
java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.SunJCE_b
at javax.crypto.Cipher.getInstance(DashoA13*..)
at com.sun.net.ssl.internal.ssl.JsseJce.getCipher(Unknown Source)
at com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.<init>(Unknown Source)
at com.sun.net.ssl.internal.ssl.ServerHandshaker.processMessage(Unknown Source)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
at com.sun.net.ssl.internal.ssl.Handshaker$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.net.ssl.internal.ssl.Handshaker$DelegatedTask.run(Unknown Source)
at org.apache.tomcat.util.net.SecureNioChannel.tasks(SecureNioChannel.java:285)
at org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap   
(SecureNioChannel.java:343)
at org.apache.tomcat.util.net.SecureNioChannel.handshake
(SecureNioChannel.java:193)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run
(NioEndpoint.java:1642)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

2 个答案:

答案 0 :(得分:2)

jce.jar必须位于已部署的Web应用程序的文件夹WEB-INF/lib内。

答案 1 :(得分:1)

我已经看到这个问题经常出现,并且似乎有很多混乱。发生这种情况的实际原因是因为您用于运行应用程序的JRE已在其jre / lib文件夹(在jdk安装文件夹中)中设置了不受限制的JCE策略jar。

如果您当前的项目不需要这些,那么您可以暂时移出该文件夹。这将删除对jce库的要求,您将不再看到此错误。

希望这有帮助。