java - Spring Boot 远程 shell 在部署到 Tomcat 时失败

标签 java ssh spring-boot tomcat8

我正在使用 Spring Boot,但实际上我遇到了一个(小)问题。这真的很困扰我,我还没有找到答案。

我已将 spring-boot-starter-remote-shell 集成到我的 pom.xml 文件中。 当将应用程序作为独立的 Spring Boot 应用程序启动时,一切工作正常。但当我尝试使用 Eclipse Tomcat 8 插件将 war 文件部署到 Tomcat 时,它根本不起作用。

这是它向我抛出的异常:

2015-02-12 11:51:13.926 ERROR 1437 --- [ost-startStop-1] org.crsh.ssh.term.SSHLifeCycle           : Could not start CRaSSHD

java.lang.SecurityException: class "org.bouncycastle.crypto.prng.VMPCRandomGenerator"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:895)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:665)
at java.lang.ClassLoader.defineClass(ClassLoader.java:758)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2452)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1264)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1147)
at org.apache.sshd.common.random.BouncyCastleRandom.<init>(BouncyCastleRandom.java:56)
at org.apache.sshd.common.random.BouncyCastleRandom$Factory.create(BouncyCastleRandom.java:48)
at org.apache.sshd.common.random.BouncyCastleRandom$Factory.create(BouncyCastleRandom.java:41)
at org.apache.sshd.common.random.SingletonRandomFactory.<init>(SingletonRandomFactory.java:37)
at org.apache.sshd.SshServer.setUpDefaultServer(SshServer.java:454)
at org.crsh.ssh.term.SSHLifeCycle.init(SSHLifeCycle.java:136)
at org.crsh.ssh.SSHPlugin.init(SSHPlugin.java:194)
at org.crsh.plugin.PluginManager.getPlugins(PluginManager.java:83)
at org.crsh.plugin.PluginContext.start(PluginContext.java:327)
at org.crsh.plugin.PluginLifeCycle.start(PluginLifeCycle.java:104)
at org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration$CrshBootstrapBean.init(CrshAutoConfiguration.java:230)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:349)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:300)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1560)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143)
at org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:89)
at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:51)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5185)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

有没有办法让它发挥作用(当然同时保持安全性)?

最佳答案

我猜想 WEB-INF/lib 中的其他 jar 文件可能包含 org.bouncycaSTLe.crypto.prng 中的类。如果这是问题所在,应该不需要很长时间就能找出问题所在

关于java - Spring Boot 远程 shell 在部署到 Tomcat 时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28475864/

相关文章:

ssh - "Host key did not appear in manually configured list"是什么意思?

java - 是否可以在 Android 上为 Android 开发?

java - Spring-Retry实现接口(interface)时找不到恢复方法

spring-boot - 在 Spring-Boot 中从我的服务器调用另一个rest api

java - 使用 Scanner (Java) 处理未知数量的整数对

java - 当我们选择“刷新”选项时,JFileChooser中的“修改日期”字段不会更新

java - 使用 equals 方法从 arraylist 获取对象 - java

java - 使用mockito进行不需要的模拟

shell - 我可以在某个地方使用 ssh,运行一些命令,然后给自己一个提示吗?

java - 如果条件基于 Activeprofile