【发布时间】:2018-03-21 17:15:11
【问题描述】:
我有一个正在运行的 tomcat 8.5 并在其上部署了我的应用程序。 虽然编译一切正常,但在运行时出现以下错误:
java.lang.NoClassDefFoundError: org/bouncycastle/jce/spec/ECPublicKeySpec
org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi.engineGeneratePublic(Unknown Source)
java.security.KeyFactory.generatePublic(KeyFactory.java:334)
COMPANY.server.impl.BouncyCastleCrypto.decodePublicKey(BouncyCastleCrypto.java:87)
COMPANY.server.impl.U2FServerReferenceImpl.processSignResponse(U2FServerReferenceImpl.java:270)
COMPANY.tools.httpserver.servlets.SignFinishServletImpl.doGet(SignFinishServletImpl.java:41)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
这是我得到的所有堆栈跟踪。
我已经尝试了几个版本的 bouncycastle 依赖项(1.58 和 1.50,我使用 maven)bcprov-jdk15on。我查看了生成的 .war 文件,WEB-INF 文件夹包含 jar。我尝试重新下载maven依赖,在eclipse中做了一个项目clean和maven clean。
我还在 java.security 文件中添加了相应的行:
security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
奇怪的是,我可以在某个时候访问 ECPublicKeySpec。例如:
ECPublicKeySpec ecPublicKeySpec = new ECPublicKeySpec(point,
new ECParameterSpec(
curve.getCurve(),
curve.getG(),
curve.getN(),
curve.getH()));
logger.info(ecPublicKeySpec.toString());
上面的工作正常但是:
KeyFactory.getInstance("ECDSA").generatePublic(ecPublicKeySpec);
或
KeyFactory.getInstance("ECDSA", "BC").generatePublic(ecPublicKeySpec);
这不起作用并产生 NoClassDefFoundError。
编辑:忘了提一下:如果我将我的应用程序部署到本地主机上的 tomcat,它就可以工作。如果我将它部署到远程 tomcat 它将不起作用。
EDIT2:mvn dependency:tree -Dverbose -Dincludes=org/bouncycastle/jce/spec/ECPublicKeySpec 的输出:
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'profiles' (position: START_TAG seen ...</profile>\n <profiles>... @276:16) @ /Users/tinoa/.m2/settings.xml, line 276, column 16
[WARNING]
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building application_implemented 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ application_implemented ---
...
lots of "Downloading/Downloaded" lines...
...
Downloaded:
https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-
invoker/2.0.11/maven-invoker-2.0.11.jar (29 kB at 22 kB/s)
Downloaded:
https://repo.maven.apache.org/maven2/org/eclipse/aether/aether-
util/0.9.0.M2/aether-util-0.9.0.M2.jar (134 kB at 102 kB/s)
Downloaded: https://repo.maven.apache.org/maven2/commons-lang/commons-
lang/2.6/commons-lang-2.6.jar (284 kB at 200 kB/s)
Downloaded: https://repo.maven.apache.org/maven2/commons-
collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
(575 kB at 333 kB/s)
[INFO] ----------------------------------------------------------------
--------
[INFO] BUILD SUCCESS
[INFO] ----------------------------------------------------------------
--------
[INFO] Total time: 15.216 s
[INFO] Finished at: 2017-10-10T15:05:40+02:00
[INFO] Final Memory: 17M/297M
[INFO] ------------------------------------------------------------------------
【问题讨论】:
-
能否请您运行“mvn 依赖项:tree -Dverbos -Dincludes=yourmissingpackage”并发布结果?有关更多信息,请参阅maven.apache.org/plugins/maven-dependency-plugin/examples/…
-
@user2122552 完成
-
遇到完全相同的问题。你找到解决办法了吗?
标签: java maven tomcat bouncycastle