2014-10-09 60 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

相关问题