Spring security 创建名为“org.springframework.security.saml.trust.h ttpclient.TLSProtocolSocketFactory”的bean时出错

Spring security 创建名为“org.springframework.security.saml.trust.h ttpclient.TLSProtocolSocketFactory”的bean时出错,spring-security,spring-saml,Spring Security,Spring Saml,我正在尝试配置仅支持https的应用程序,并且在securityContext.xml文件中添加了以下配置: <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass" value="org.apache.commons.httpclient.protocol.Protocol"/> <property n

我正在尝试配置仅支持https的应用程序,并且在securityContext.xml文件中添加了以下配置:

<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”的bean时出错 在ServletContext资源[/WEB-INF/securityContext.xml]中定义的otocol59a20678]:无法创建内部bean“org.springframework.security.s” [org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory5658808]类型的“[org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory] 在设置构造函数参数时;嵌套异常为org.springframework.beans.factory.BeanCreationException:使用n创建bean时出错 在ServletContext资源[/WEB-INF/secur]中定义的名称为“org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory5658808” xml]:bean实例化失败;嵌套异常为org.springframework.beans.BeanInstantiationException:无法实例化 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.resolveInnerBeanBeanDefinitionValueResolver.java:281 位于org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessaryBeanDefinitionValueResolver.java:12 0 位于org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArgumentsConstructorResolver.java:630 位于org.springframework.beans.factory.support.ConstructorResolver.AutoWireConstructorResolver.java:148 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.AutoWireConstructorAbstractAutoWireCapableBeanFactory ry.java:1035 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstanceAbstractAutowireCapableBeanFactor y、 爪哇:939 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBeanAbstractAutowireCapableBeanFactory.java :485 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanAbstractAutowireCapableBeanFactory.java:4 56 位于org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanBeanDefinitionValueResolver.java:270 ... 还有24个 原因:org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.saml.trust.h”的bean时出错 在ServletContext资源[/WEB-INF/securityContext.xml]中定义的ttpclient.TLSProtocolSocketFactory5658808]: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.InstanceBeanAbstractAutoWireCapableBeanFactory.j 艾娃:997 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstanceAbstractAutowireCapableBeanFactor y、 爪哇:943 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBeanAbstractAutowireCapableBeanFactory.java :485 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanAbstractAutowireCapableBeanFactory.java:4 56 位于org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanBeanDefinitionValueResolver.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.SimpleInstanceStrategy.InstanceSimpleInstanceStrategy.java:72 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.InstanceBeanAbstractAutoWireCapableBeanFactory.j 艾娃:990 ... 36多 原因:java.lang.NoSuchMethodException:org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory。 位于java.lang.Class.getConstructor0Class.java:2971 位于java.lang.Class.getDeclaredConstructorClass.java:2165 在org.springframework.beans.factor上 y、 support.SimpleInstanceStrategy.InstanceSimpleInstanceStrategy.java:67 ... 37多 错误listenerStart

你能指导我如何纠正这个问题吗。?我有最新的主干。

TLSProtocolSocketFactory需要多个构造函数参数,而您没有指定这些参数,这就是配置失败的原因

如果希望Spring SAML自动配置TLSProtocolSocketFactory,只需按照中的说明操作,并包含以下bean,而不是调用FactoryBean的方法:


谢谢你,伙计。请给我发送一个关于如何指定X509KeyManager和X509TrustManager的示例。这将大有帮助。而且,如果您有任何javascript身份验证客户端用于测试此功能,请与我共享。许多人感谢我更新了最新Spring SAML版本的答案-KeyManager现在在TLSProtocolSocketFactory中内部构建,因此您不再需要提供它。如果您还有其他问题,请单独打开。您的问题@Kannan解决了吗?
<bean class="org.springframework.security.saml.trust.httpclient.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>