java - Spring Boot Application SSL 属性配置:setKeyStorePassword 之前的 getKeyStorePassword
问题描述
在尝试使用 spring boot 和 tomcat 配置 HTTPS/SSL 功能时,我开始看到这个错误:
Caused by: java.lang.IllegalArgumentException: Invalid keystore format
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:116)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:87)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225)
at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1150)
at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1018)
... 22 common frames omitted
SSL.java
进一步挖掘,我看到了填充类的顺序(SSL.java
是用于配置的基本 POJO)。访问 POJO 以获取值的顺序令人震惊。我在“set”调用之前看到了“get”调用(特别是getKeyStorePassword
在 之前setKeyStorePassword
)。这可不好!
这似乎是一个非常奇怪的弹簧错误,它与自己竞争以设置和获取值。在这种情况下,即使正确的值最终到位,SSL 配置也会失败,因为它们在设置之前已被访问。有人可以强调为什么会这样以及潜在的解决方法吗?
我们使用的是 Spring 1.5.12,可以确认所有配置都是正确的。
解决方案
奇怪的是,这似乎是一个 POM/Maven 问题。
通过将我们的资源过滤设置为 false,应用程序开始以正确的顺序设置其所有变量。
<resource>
<directory>src/main/java/resources</directory>
<filtering>false</filtering>
</resource>
推荐阅读
- bash - 如何从命令行打开新的 VSCode 终端窗口
- reactjs - Node Express.js 服务器端渲染不在生产环境中运行
- swift - 如何隐藏导航栏 Swift
- java - ImageLayoutBinding 存在,ImageLayoutBindingImpl 不存在,DataBinderMapperImpl 正在寻找 impl 文件。我怎样才能解决这个问题?
- python - Python 结合来自 FTP 的 CVS 并输出它们
- go - 附加不适用于定义为结构类型切片的命名类型
- c# - C# 从 UserControl 更改主窗体的 UI
- angular - 如何配置 Wildfly 以重写 Angular 应用程序的 URL
- c# - 在 Web 服务中捕获无效的传入请求
- php - 如何在教义中生成二传手?