0

我正在尝试配置应仅支持 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:在 ServletContext 资源 [/WEB-INF/securityContext.xml] 中定义名称为“org.apache.commons.httpclient.protocol.Protocol#59a20678”的 bean 创建错误 [/WEB-INF/securityContext.xml]:不能在设置构造函数参数时创建 [org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory] ​​类型的内部 bean 'org.springframework.security.s aml.trust.httpclient.TLSProtocolSocketFactory#5658808';嵌套异常是 org.springframework.beans.factory.BeanCreationException: Error Creating bean with name 'org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory#5658808' 在 ServletContext 资源 [/WEB-INF/secur ityContext.xml ]: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory]:未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException: org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory.() at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:281) at 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。 org.springframework.beans.factory 的 ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)。h ttpclient.TLSProtocolSocketFactory#5658808' 在 ServletContext 资源 [/WEB-INF/securityContext.xml] 中定义:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.security.sa ml.trust.httpclient.TLSProtocolSocketFactory]:未找到默认构造函数;嵌套异常是 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.j ava:997) 的 java.lang.NoSuchMethodException: org.spring framework.security.saml.trust.httpclient.TLSProtocolSocketFactory.() .springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactor y.java:943) 在 org.springframework.beans.factory.support。AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java :485) at 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.() at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.

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

4

1 回答 1

0

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

如果您希望 Spring SAML 自动配置,TLSProtocolSocketFactory只需按照手册中的说明(第 7.2.3 章)并包含以下 bean 而不是您的MethodInvokingFactoryBean

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

如果您不想使用TLSProtocolConfigurer另一种方法是包含以下应该具有相同效果的bean:

<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>
于 2014-10-10T20:46:38.643 回答