我已经成功运行了Spring Security SAML Extension示例应用程序。现在,我试图将它集成到我的主应用程序中。在我尝试与我的应用程序集成之前,我创建了一个示例应用程序来集成它,它工作正常。在我的示例应用程序中,我使用了下载的示例应用程序中的密钥库。现在,我尝试使用相同的密钥库,我收到以下错误:
引起:org.springframework.beans.factory.BeanCreationException: 无法自动装配方法:public void org.springframework.security.saml.metadata.MetadataGenerator.setKeyManager(org.springframework.security.saml.key.KeyManager); 嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为' keyManager'的bean在ServletContext中定义 resource [/WEB-INF/spring/securityContext.xml]:bean的实例化 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:不能 实例化bean类 [org.springframework.security.saml.key.JKSKeyManager]:构造函数 抛出异常;嵌套异常是java.lang.RuntimeException:错误 初始化密钥库 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) ... 89更多引起: org.springframework.beans.factory.BeanCreationException:错误 创建名为' keyManager'的bean在ServletContext中定义 resource [/WEB-INF/spring/securityContext.xml]:bean的实例化 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:不能 实例化bean类 [org.springframework.security.saml.key.JKSKeyManager]:构造函数 抛出异常;嵌套异常是java.lang.RuntimeException:错误 初始化密钥库 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:278) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1114) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1017) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 在 org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:553) ... 91更多引起: org.springframework.beans.BeanInstantiationException:不能 实例化bean类 [org.springframework.security.saml.key.JKSKeyManager]:构造函数 抛出异常;嵌套异常是java.lang.RuntimeException:错误 初始化密钥库 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164) 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:125) 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:270) ... 103更多引起:java.lang.RuntimeException:错误 初始化密钥库 org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:121) 在 org.springframework.security.saml.key.JKSKeyManager。(JKSKeyManager.java:79) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) ... 105更多引起:java.io.IOException:密钥库格式无效 在 sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650) 在 sun.security.provider.JavaKeyStore $ JKS.engineLoad(JavaKeyStore.java:55) 在java.security.KeyStore.load(KeyStore.java:1214)at org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:117) ...... 111更多
以下是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>
任何人都可以帮我解决导致此错误的原因吗?
答案 0 :(得分:7)
我有类似的问题;我想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>
答案 1 :(得分:2)
我有同样的问题。 Maven正在错误地复制二进制文件。
我必须将以下内容添加到我的maven-resources-plugin:
<nonFilteredFileExtensions>
<nonFilteredFileExtension>jks</nonFilteredFileExtension>
</nonFilteredFileExtensions>
您可以通过在目标目录中运行命令来测试它:
keytool -list -keystore ~/<your_project_target_directory>/security/samlKeystore.jks
当我的maven正在错误地复制文件时,我得到了:
keytool error: java.io.IOException: Invalid keystore format
一旦我添加了nonFilteredFileExtension,我立即被提示输入密码。
答案 2 :(得分:-1)
您可以直接从Spring SAML源中直接替换您正在部署的Web存档中的samlKeystore.jks
来开始进行故障排除。这可以帮助您确定问题是在密钥库中还是在代码中 - 很可能是密钥库。
如果您使用Maven构建应用程序,请确保密钥存储区位于构建中的resources
文件夹中,而不是java
或{{1 }}。 Maven在构建期间往往会损坏密钥库,除非它被放置在webapp
文件夹中。