2014-11-05 6 views
5

Я успешно получил приложение примера расширения Spring 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 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 непосредственно в веб-архиве, который вы развертываете, с одним непосредственно из источников SAML Spring. Это может помочь вам определить, находится ли проблема в хранилище ключей или в вашем коде - скорее всего, это хранилище ключей.

В случае, если вы используете Maven для создания вашего приложения, убедитесь, что хранилище ключей находится в папке resources в вашей сборке, а не в java или webapp. Maven стремится повредить хранилище ключей во время строительства, если оно не помещено в папку resources.

+0

Он находится в папке 'resources'. Я просто имею его в той же папке безопасности, что и образец. К каким источникам SAML относятся источники? – NuAlphaMan

+0

Я имел в виду этот файл https://github.com/spring-projects/spring-security-saml/blob/master/sample/srl/main/resources/security/samlKeystore.jks –

+0

Я заменил хранилище ключей, как вы предложили и я все еще получаю ошибку. Мы используем Maven, но, как я сказал ранее, он находится в папке ресурсов. Любые другие предложения? – NuAlphaMan

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' полностью рекурсивным или работает только с папками первого уровня. –

1

У меня была та же проблема. Maven неправильно копировал двоичный файл.

я должен был добавить следующее моим Maven-ресурсы-плагин:

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

Вы можете проверить это, выполнив команду в целевом каталоге:

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

Когда мой специалист переписывал файл неправильный я получал:

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

Как только я добавил nonFilteredFileExtension Мне сразу было предложено ввести пароль.

Смежные вопросы