gpt4 book ai didi

java - 在 Spring 3.1 中使用基本身份验证的 RestTemplate

转载 作者:IT老高 更新时间:2023-10-28 13:46:02 77 4
gpt4 key购买 nike

我们在 Spring 3.0 中使用带有 xml 配置的 RestTemplate,它工作得非常好。

<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient"> 
<!-- <constructor-arg ref="httpClientParams"/> -->
</bean>

<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<constructor-arg ref="httpClient"/>
</bean>

<bean id="restTemplate" name="restTemplate" class="org.springframework.web.client.RestTemplate" autowire-candidate="true">
<constructor-arg ref="httpClientFactory" />

<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
</list>
</property>
</bean>

但是,当我们尝试迁移到 Spring 3.1 版本时,CommonsClientHttpRequestFactory 类已被弃用,并且不再使用 commons HttpClient。

我尝试使用 HttpComponentsClientHttpRequestFactory 类和 Apache HttpClient 设置类似的配置,但不知道如何设置凭据提供程序。

我们想要具有基本身份验证的 httpclient。有没有人这样做或任何指针将是很大的帮助。提前致谢。

最佳答案

我终于能够完成这项工作。不确定它是否是最优的,因为这是第一个对我有用的解决方案。

`

<!-- Credentials provider needed by apache default http client -->
<bean id="credentialProvider" class="org.apache.http.impl.client.BasicCredentialsProvider" />

<!-- 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>

<!-- Authorization scope for accessing restful service. Since we want this template to be used for everything, we are setting up it with defaults -->
<bean id="authScope" class="org.apache.http.auth.AuthScope">
<constructor-arg name="host"><null /></constructor-arg>
<constructor-arg><value>-1</value> </constructor-arg>
<constructor-arg><null /></constructor-arg>
<constructor-arg><null /></constructor-arg>
</bean>

<!-- Username and Password Credentials to access restful service -->
<bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
<constructor-arg name="userName"><value>xxx</value></constructor-arg>
<constructor-arg name="password"><value>xxx</value></constructor-arg>
</bean>

<!-- Client factory which uses Apache HttpClient implementation. Note that it DO NOT use apache commons httpclient -->
<bean id="httpClientFactory" class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
<constructor-arg ref="httpClient"/>
</bean>

<bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient">
<property name="credentialsProvider" ref="credentialProvider"/>
</bean>

<!-- Rest template for Spring 3.1. Used HttpClientFactory to make request -->
<bean id="restTemplate" name="restTemplate" class="org.springframework.web.client.RestTemplate" autowire-candidate="true">
<constructor-arg ref="httpClientFactory" />

<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
</list>
</property>
</bean>`

关于java - 在 Spring 3.1 中使用基本身份验证的 RestTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048812/

77 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com