2014-11-05 66 views
5

我已成功获得Spring Security SAML扩展示例应用程序的运行。现在,我正试图将它集成到我的主应用程序中。在我尝试与我的应用程序集成之前,我创建了一个示例应用程序来将其与它集成,并且工作正常。在我的示例应用程序中,我使用了下载的示例应用程序中的密钥库。现在,我试图使用相同的密钥库,我发现了以下错误:java.io.IOException:密钥存储格式无效Spring Security SAML扩展

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.saml.metadata.MetadataGenerator.setKeyManager(org.springframework.security.saml.key.KeyManager); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'keyManager' defined in ServletContext resource [/WEB-INF/spring/securityContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.security.saml.key.JKSKeyManager]: Constructor threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) ... 89 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'keyManager' defined in ServletContext resource [/WEB-INF/spring/securityContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.security.saml.key.JKSKeyManager]: Constructor threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:278) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1114) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1017) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 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.findAutowireCandidates(DefaultListableBeanFactory.java:1017) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:553) ... 91 more Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.security.saml.key.JKSKeyManager]: Constructor threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:125) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:270) ... 103 more Caused by: java.lang.RuntimeException: Error initializing keystore at org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:121) at org.springframework.security.saml.key.JKSKeyManager.(JKSKeyManager.java:79) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) ... 105 more Caused by: java.io.IOException: Invalid keystore format at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650) at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) at java.security.KeyStore.load(KeyStore.java:1214) at org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:117) ... 111 more

下面是JKSKeyManager的bean的配置:

<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager"> 
     <constructor-arg value="classpath:security/samlKeystore.jks" /> 
     <constructor-arg type="java.lang.String" value="nalle123" /> 
     <constructor-arg> 
      <map> 
       <entry key="apollo" value="nalle123" /> 
      </map> 
     </constructor-arg> 
     <constructor-arg type="java.lang.String" value="apollo" /> 
    </bean> 

谁能帮我什么导致这个错误?

回答

-1

您可以通过直接更换samlKeystore.jks在你部署的Web归档文件,一个直接从春SAML源启动故障排除。这可以帮助您确定问题是在密钥库还是在您的代码中 - 很可能是密钥库。

如果您正在使用Maven您的应用程序的建设,确保密钥存储放置在resources文件夹中生成,而不是在javawebapp。除非将Maven放置在resources文件夹中,否则Maven往往会在构建期间破坏密钥库。

+0

它位于'resources'文件夹下。我只是将它放在与示例相同的安全文件夹下。你指的是哪些Spring SAML源? – NuAlphaMan 2014-11-06 17:47:14

+0

我指的是这个文件https://github.com/spring-projects/spring-security-saml/blob/master/sample/src/main/resources/security/samlKeystore.jks – 2014-11-06 19:44:25

+0

我更换了密钥库如你所说而且我仍然遇到错误。我们正在使用Maven,但正如我之前所说,它位于资源文件夹下。还有其他建议吗? – NuAlphaMan 2014-11-07 13:41:52

3

我有类似的问题;我想Maven正在过滤掉我的资源并添加了这个解决了问题:

<resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
     <excludes> 
      <exclude>**/*.jks</exclude> 
     </excludes> 
    </resource> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>false</filtering> 
     <includes> 
      <include>**/*.jks</include> 
     </includes> 
    </resource> 
+0

它解决了这个问题!奇怪的是,起初我想将密钥库放在'src/main/resources/properties/security/saml'中,并且Maven资源过滤正在破坏密钥库。当我将'samlKeystore.jks'移动到'src/main/resources/security /'时开始工作。我想知道'**/*。jks'过滤器是完全递归的还是仅适用于第一级文件夹。 – 2015-09-23 14:14:46

1

我有同样的问题。 Maven正在错误地复制二进制文件。

我不得不以下内容添加到我的Maven的资源 - 插件:

keytool -list -keystore ~/<your_project_target_directory>/security/samlKeystore.jks 

当我的行家被复制:

<nonFilteredFileExtensions> 
    <nonFilteredFileExtension>jks</nonFilteredFileExtension> 
</nonFilteredFileExtensions> 

你可以通过在你的目标目录中运行命令来测试这该文件不正确我得到:

keytool error: java.io.IOException: Invalid keystore format 

一旦我添加nonFilteredFileExtension我立即被提示输入密码。

相关问题