我有一个非常奇怪的问题(对我来说)。我使用充气城堡来解密/解密Web应用程序中的某些邮件。重新部署我的应用程序后,我得到此异常
java.lang.NoClassDefFoundError:org / bouncycastle / jcajce / spec / SkeinParameterSpec位于org.bouncycastle.jcajce.provider.symmetric.util.BaseMac.engineInit(未知源)位于javax.crypto.Mac.init(Mac.java:443)在org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.engineLoad(未知源)的org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.calculatePbeMac(未知源)处.java:1445)位于my.application.Class .getDecryptedContent(my.application.Class .java:401)位于my.application.Class .decrypt(my.application.Class .java:91)位于my.application.Class。 getKvConnectMail(my.application.Class .java:320)在my.application.Class .shedule(my.application.Class上的my.application.Class .processEinClick(my.application.Class .java:198).java:44),位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法),位于java.sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)。在org.springframework.scheduling.support.MethodInvokingRunnable.run(MethodInvokingRunnable.java:65)上的org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)上的lang.reflect.Method.invoke(Method.java:497)在org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:51)在org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)在java.util.concurrent.Executorscall $ Runn (Executors.java:511),位于java.util.concurrent.FutureTask.run(FutureTask.java:266),位于java.util.concurrent。在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)处的ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:180)在java.util.concurrent.ThreadPoolExecutor.run2 java.lang.Thread.run(Thread.java:745)上的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)
所以我认为我的应用程序的WEB-INF / lib文件夹中缺少该库,但是它在那里。
奇怪的是:如果我直接在此Codesnipped中使用Class,则Snipped会正确执行而不会出现错误。
LOGGER.error("Class!!!: " + SkeinParameterSpec.class.getName());
SkeinParameterSpec spec = new SkeinParameterSpec();
LOGGER.error("Instance!!!: " + spec.toString());
LOGGER.error("Instanceof: " + (spec instanceof SkeinParameterSpec));
但是库类org.bouncycastle.jcajce.provider.symmetric.util.BaseMac使用的代码与我所截断的代码几乎相同,但上面的Exception结尾。
有人可以帮助我了解为什么会这样吗?
PS:只有重新启动每个人都认为可行的整个Tomcat后,这才发生在重新部署之后。
更新1:我忘了说我使用Liferay。但是我的WebApplication是正常的,与Liferay没有任何关系。
但是:经过一番调查,我发现Liferay有一些库(/ tomcat / webapps / ROOT / lib)。也是旧版本的Bouncycastle。我的Web应用程序是否可能使用了这些库,而该错误是Liferay的库和CustomClassLoaders的结果?
解决方案:请参阅正确答案的“ inigo分离器”注释。
我猜可能在类路径上可能有另一个版本的bouncycastle lib(可能在Tomcat / lib文件夹中),或者是其他一些jar所要求的,该jar首先被加载并且不包含所需的类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句