2014-10-09 40 views
0

我想配置我的應用程序,它應該僅支持https,並且我在securityContext.xml文件中添加了以下配置:創建名爲org.springframework.security.saml.trust.h的bean時出錯ttpclient.TLSProtocolSocketFactory

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
<property name="targetClass" value="org.apache.commons.httpclient.protocol.Protocol"/> 
<property name="targetMethod" value="registerProtocol"/> 
<property name="arguments"> 
<list> 
<value>https</value> 
<bean class="org.apache.commons.httpclient.protocol.Protocol"> 
<constructor-arg value="https"/> 
<constructor-arg> 
<bean class="org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory"/> 
</constructor-arg> 
<constructor-arg value="443"/> 
</bean> 
</list> 
</property> 
</bean> 

雖然運行的服務器,我收到以下異常:

造成的:org.springframework.beans.factory.BeanCreationException:錯誤創建名稱爲豆「org.apache.commons.httpclient.protocol .Pr 協議#59a20678'在ServletContext資源中定義[/WEB-INF/securityContext.xml]:設置構造函數參數時,無法創建內部Bean'org.springframework.security.s aml.trust.httpclient.TLSProtocolSocketFactory#5658808'類型爲[org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory] ​​ ;嵌套異常是org.springframework.beans.factory.BeanCreationException:創建bean時出錯n ame'org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory#5658808'在ServletContext資源中定義[/ WEB-INF/secur ityContext .xml]:bean的實例化失敗;嵌套異常是org.springframework.beans.BeanInstantiationException:不能instantia te bean類[org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory]:找不到默認構造函數;嵌套異常 是java.lang.NoSuchMethodException:org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory() 在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:281) 在。 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:12 0) 在org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:630) 在org.springframework。 beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFacto ry.java:1035) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactor y.java:939) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java :485) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:4 56) 在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270) ... 24更多 原因:org.springframework.beans.factory.BeanCreationException:使用n創建bean時出錯ame'org.springframework.security.saml.trust.h ttpclient.TLSProtocolSocketFactory#5658808'在ServletContext資源中定義[/WEB-INF/securityContext.xml]:bean實例化失敗; 嵌套異常是org.springframework.beans.BeanInstantiationException:無法實例化bean類[org.springframework.security.sa ml.trust.httpclient.TLSProtocolSocketFactory]:找不到默認構造函數;嵌套異常是java.lang.NoSuchMethodException:org.spring framework.security.saml.trust.httpclient.TLSProtocolSocketFactory() 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.j AVA:997 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactor y。的java:943) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java :485) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:4 56 ) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270) ... 32更多 引起:org.springframework.beans.BeanInstantiationException:無法實例化bean類[org.springframework .security.saml.trust.h ttpclient.TLSProtocolSocketFactory]:找不到默認構造函數;嵌套異常是java.lang.NoSuchMethodException:org.springframework。 security.saml.trust.httpclient.TLSProtocolSocketFactory。() 在org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:72) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean (AbstractAutowireCapableBeanFactory.j AVA:990) ...... 36多個 造成的:java.lang.NoSuchMethodException:org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory() 在java.lang.Class.getConstructor0 (Class.java:2971) 在java.lang.Class.getDeclaredConstructor(Class.java:2165) 在org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:67) ... 37更多 錯誤收聽者起始

請問您如何解決此問題,請指導我。我有最新的主幹。

回答

0

TLSProtocolSocketFactory需要多個參數,因爲它的構造函數沒有指定,這就是爲什麼你的配置失敗。

如果你想在manual (chapter 7.2.3)春SAML自動配置的TLSProtocolSocketFactory只需按照指示,幷包括以下豆,而不是你MethodInvokingFactoryBean

<bean class="org.springframework.security.saml.trust.httpclient.TLSProtocolConfigurer"/> 

如果你不想使用TLSProtocolConfigurer其他方式是包括下列豆應該有同樣的效果:

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetClass" value="org.apache.commons.httpclient.protocol.Protocol"/> 
    <property name="targetMethod" value="registerProtocol"/> 
    <property name="arguments"> 
     <list> 
      <value>https</value> 
      <bean class="org.apache.commons.httpclient.protocol.Protocol"> 
       <constructor-arg value="https"/> 
       <constructor-arg> 
        <bean class="org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory"> 
         <constructor-arg ref="keyManager"/> 
         <constructor-arg><null/></constructor-arg> 
         <constructor-arg value="default"/> 
        </bean> 
       </constructor-arg> 
       <constructor-arg value="443"/> 
      </bean> 
     </list> 
    </property> 
</bean> 
+0

謝謝你的男人。請給我一個關於如何指定X509KeyManager和X509TrustManager的示例。這將有很大的幫助。此外,如果您有任何用於測試的javascript身份驗證客戶端,請分享給我。很多謝謝 – Kannan 2014-10-13 04:39:45

+0

我已經更新了最新的Spring SAML版本的答案 - KeyManager現在在TLSProtocolSocketFactory的內部構建,因此您不需要再提供它。如果您還有其他問題,請單獨打開它們。 – 2014-10-13 07:49:14

相關問題