0

我有一个应用程序正在使用带有 CreditialProvider 的 RestTemplate ,这与此 StackOverflow 条目的已接受解决方案中描述的方式完全相同(RestTemplate with Basic Auth in Spring 3.1)。

当我为此设置了一个服务时,这工作得很好。但是,我最近添加了一个新的 RestTemplate 供另一个服务使用,具有不同的用户名和密码,并且在它的生命周期内无法使用用户名和密码发出 Rest 请求。所有的 bean id 都是不同的,所以那里不可能有任何问题。

当单步执行 Spring 启动时,它似乎只是将一组空凭据附加到 HttpClient。

使用此解决方案时我应该考虑的任何建议或陷阱?任何会导致此解决方案混乱的单例(池)?

4

1 回答 1

0

好吧,我终于想通了。这是一个 Spring 的东西,是那些很难找到的烦人的东西之一。

问题的核心是我的问题中提到的解决方案的这一部分:

<!-- 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 定义时,我复制并粘贴了,没有意识到“methodInvoke”的重复 id 值会导致它只运行 1 次。

底线:如果 bean 不需要,不要给它一个 id - 它只会让你悲伤。在这种情况下,它没有在其他任何地方引用,因为它只是一个 MethodInvoker。

于 2013-10-04T22:58:38.920 回答