【问题标题】:Multiple RestTemplate and CredentialProviders not working well in Spring多个 RestTemplate 和 CredentialProviders 在 Spring 中无法正常工作
【发布时间】:2013-10-12 01:14:42
【问题描述】:

我有一个应用程序正在使用带有 CreditialProvider 的 RestTemplate,与此 StackOverflow 条目 (RestTemplate with Basic Auth in Spring 3.1) 的公认解决方案中描述的完全一样。

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

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

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

【问题讨论】:

    标签: apache-httpclient-4.x resttemplate


    【解决方案1】:

    好吧,我终于想通了。这是一个 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,就不要给它一个 id - 它只会让你悲伤。在这种情况下,它没有被其他任何地方引用,因为它只是一个 MethodInvoker。

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 1970-01-01
      • 2018-10-29
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 2014-10-08
      • 2017-08-26
      相关资源
      最近更新 更多