【发布时间】:2019-03-02 06:33:41
【问题描述】:
当我执行我的 Spring Boot 应用程序时,我会覆盖生命周期中名为 postConstruct 的方法,当我想设置一些特定属性时,例如 server.ssl.key-store-password 和 server.ssl.trust-store-password 这是我的代码:
@PostConstruct
private void postConstruct() {
try {
Map<String, String> encryptedPass = new HashMap<String,String>();
System.getProperties().setProperty("server.ssl.key-store-password","decryptedpass1");
System.getProperties().setProperty("server.ssl.trust-store-password","decryptedpass2");
logger.info("########decryptedpass1 "+System.getProperty("server.ssl.key-store-password")); //return decryptedpass1
logger.info("########decryptedpass2 "+System.getProperty("server.ssl.trust-store-password"));//return decryptedpass2
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在控制台上打印得很好,但我遇到了一个异常 java.security.UnrecoverableKeyException: Password verification failed !
那么我怎样才能覆盖真实的(application.propoerties)
日志错误:
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.10.RELEASE.jar!/:1.5.10.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.10.RELEASE.jar!/:1.5.10.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.10.RELEASE.jar!/:1.5.10.RELEASE]
at com.socgen.bapi.party.PartyApplication.main(PartyApplication.java:23) [classes!/:0.0.2-SNAPSHOT]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [bapi-party-0.0.2-SNAPSHOT.jar:0.0.2-SNAPSHOT]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [bapi-party-0.0.2-SNAPSHOT.jar:0.0.2-SNAPSHOT]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [bapi-party-0.0.2-SNAPSHOT.jar:0.0.2-SNAPSHOT]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [bapi-party-0.0.2-SNAPSHOT.jar:0.0.2-SNAPSHOT]
Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1021) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
... 21 common frames omitted
Caused by: java.lang.IllegalArgumentException: java.io.IOException: Keystore was tampered with, or password was incorrect
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:116) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:87) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1150) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1018) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
... 22 common frames omitted
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:780) ~[na:1.8.0_144]
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56) ~[na:1.8.0_144]
at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224) ~[na:1.8.0_144]
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70) ~[na:1.8.0_144]
at java.security.KeyStore.load(KeyStore.java:1445) ~[na:1.8.0_144]
at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:139) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:204) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.tomcat.util.net.jsse.JSSEUtil.getKeyManagers(JSSEUtil.java:184) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:114) ~[tomcat-embed-core-8.5.27.jar!/:8.5.27]
... 27 common frames omitted
Caused by: java.security.UnrecoverableKeyException: Password verification failed
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:778) ~[na:1.8.0_144]
... 35 common frames omitted
2018-09-26 15:08:21.673 INFO 23610 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2018-09-26 15:08:21.696 INFO 23610 --- [ main] utoConfigurationReportLoggingInitializer :
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2018-09-26 15:08:21.698 ERROR 23610 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
【问题讨论】:
-
请提供相关代码抛出
UnrecoverableKeyException。我们需要知道属性在哪里以及如何使用。 -
什么时候调用你的异常?
-
提取密码后调用(设置属性并显示)
-
@PostConstruct是一个相当冒险的地方来设置这些 JVM 范围的属性,因为它在启动序列中的位置相当不确定。在启动 spring 上下文或在 java 命令行上使用-D选项之前,最好在main()方法中调用System.setProperty()。
标签: java spring spring-boot