0

この StackOverflow エントリ ( Spring 3.1 の Basic Auth を使用した RestTemplate ) の受け入れられたソリューションで説明されているとおりに、CreditialProvider を使用して RestTemplate を使用しているアプリケーションがあります。

これで単一のサービスをセットアップしている間、これは問題なく機能しました。ただし、最近、別のサービスで使用される新しい RestTemplate を別のユーザー名とパスワードで追加しましたが、その寿命の間、ユーザー名とパスワードを使用して Rest 要求を行うことはできません。すべての Bean ID が異なるため、問題は発生しません。

Spring スタートアップをステップ実行すると、空のクレデンシャル セットが HttpClient にアタッチされているように見えます。

このソリューションを使用する際に考慮すべき提案や落とし穴はありますか? このソリューションを台無しにするシングルトン (プール) はありますか?

4

1 に答える 1

0

なるほど、やっとわかった。これは、見つけるのが難しい迷惑なものの 1 つである春のものでした。

問題の核心は、私の質問で言及されているソリューションのこの部分でした。

<!-- Used to invoke a method in BasicCredentialsProvider.  This has to be done this way as BasicCredentialsProvider does not take 
provider and credentials in constructor or setter method.  It has to set by invoking setCredentials() method and passing two arguments -->  
<bean id="methodInvoke" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject"><ref local="credentialProvider" /> </property>
    <property name="targetMethod" value="setCredentials"> </property>
    <property name="arguments"  >
        <list>
            <ref local="authScope" />
            <ref local="credentials" />
        </list>
    </property>
</bean>

Rest サービスの Spring 定義の 2 番目のセットを作成するときに、コピーして貼り付けましたが、「methodInvoke」の ID 値が重複していると、これが 1 回しか実行されないことに気付きませんでした。

結論: Bean に id が必要ない場合は、id を付けないでください。この場合、それは単なる MethodInvoker であるため、他のどこからも参照されません。

于 2013-10-04T22:58:38.920 に答える