Java Jetty:初始化密钥库时出错

Java Jetty:初始化密钥库时出错,java,jetty,keystore,spring-saml,okta-api,Java,Jetty,Keystore,Spring Saml,Okta Api,首先,我已经对stackoverflow提出了这些问题,但它们并没有解决我的问题,因此创建了一个新问题: 问题: 在将SAML与我的Jetty web应用程序集成时(通过遵循以下教程:),我遇到以下错误: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' th

首先,我已经对stackoverflow提出了这些问题,但它们并没有解决我的问题,因此创建了一个新问题:

问题:

在将SAML与我的Jetty web应用程序集成时(通过遵循以下教程:),我遇到以下错误:

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.

所以在下载源代码并调试了一段时间后,我发现了问题所在

事实证明,源代码中的这一行导致了问题(我在问题中提到的链接使用以下代码):

我更改了以下行:

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


而且它工作得很好。我所做的唯一更改是使用
FileSystemResource
而不是
DefaultResourceLoader


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

因此,在下载源代码并调试一段时间后,我发现了问题

事实证明,源代码中的这一行导致了问题(我在问题中提到的链接使用以下代码):

我更改了以下行:

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


而且它工作得很好。我所做的唯一更改是使用
FileSystemResource
而不是
DefaultResourceLoader


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

您是否查看了此问题?是的。它给出的解决方案是“maven可能正在过滤出jks文件”。我没有像我的问题中提到的那样使用maven。那么keytool对这个文件有效吗?尝试C:\Java\jdk_1.7.3\bin>keytool-list keystore.jksI获取“非法选项:keystore.jks”更正:keytool-list-keystore keystore.jks提供正确的输出。没问题你查过这个了吗?是的。它给出的解决方案是“maven可能正在过滤出jks文件”。我没有像我的问题中提到的那样使用maven。那么keytool对这个文件有效吗?尝试C:\Java\jdk_1.7.3\bin>keytool-list keystore.jksI获取“非法选项:keystore.jks”更正:keytool-list-keystore keystore.jks提供正确的输出。无错误
DefaultResourceLoader
解析类路径资源,而
FileSystemResourceLoader
将普通路径解析为文件系统资源。源:
DefaultResourceLoader
解析类路径资源,而
FileSystemResourceLoader
解析普通路径作为文件系统资源。资料来源: