Jetty:初始化密钥库时出错

Jetty: Error initializing keystore

对于初学者,我已经在 Whosebug 上参考了这些问题,但它们没有解决我的问题,因此创建一个新问题:

java.io.IOException: Invalid Keystore format

tomcat 7 ssl invalid keystore format

问题:

在将 SAML 与我的 Jetty 网络应用程序集成时(按照教程:https://developer.okta.com/blog/2017/03/16/spring-boot-saml),我收到以下错误:

org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore

我尝试从 JDK 的多个版本创建密钥库,但对于所有文件,我都遇到相同的错误。

我也没有使用 maven。

编辑:

异常跟踪:

unavailable Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore
FAILED o.e.j.s.ServletContextHandler@550dbc7a{/api,null,STARTING}: javax.servlet.ServletException: org.springframework.web.servlet.DispatcherServlet-7b2bbc3@bef2d67e==org.springframework.web.servlet.DispatcherServlet,-1,false org.springframework.web.servlet.DispatcherServlet-7b2bbc3@bef2d67e==org.springframework.web.servlet.DispatcherServlet,-1,false
FAILED  
Error Details:
     org.springframework.web.servlet.DispatcherServlet-7b2bbc3@bef2d67e==org.springframework.web.servlet.DispatcherServlet,-1,false
Server exiting.

于是下载了源码,调试了一段时间,发现了问题

事实证明,源代码中的这一行导致了问题(我在问题中提到的 link 使用了这段代码): Spring Security with SAML

我更改了以下行:

DefaultResourceLoader loader = new DefaultResourceLoader();
Resource storeFile = loader.getResource(keyStore.getStoreFilePath());

Resource storeFile = new FileSystemResource(keyStore.getStoreFilePath());

而且效果很好。我做的唯一改变是使用 FileSystemResource 而不是 DefaultResourceLoader

虽然,在不同的应用程序中,不需要任何更改,但我不确定为什么它无法在 1 个应用程序中读取相同的文件而在另一个应用程序中失败。需要更多的调试。但是,我正在分享解决方案,以防有人遇到同样的问题。