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 を作成中にエラーが発生しました: できませんコンストラクター引数の設定中に、タイプ [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' defined in 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) at 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]: デフォルトのコンストラクターが見つかりません。ネストされた例外は java.lang.NoSuchMethodException: org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory.() at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:997) at org .springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactor y.java:943) at 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 を自動構成する場合は、マニュアル (第 7.2.3 章)TLSProtocolSocketFactoryの指示に従い、 .xmlの代わりに次の 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 に答える