当前位置: 首页 > 面试题库 >

在Spring 3.1中具有基本身份验证的RestTemplate

杨宏儒
2023-03-14
问题内容

我们在Spring 3.0中将RestTemplate与xml配置一起使用,并且运行良好。

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


 类似资料:
  • 问题内容: 我必须 使用 HTTP Basic身份验证从http服务器下载和解析XML文件。现在,我这样做: 但是以这种方式,我无法从具有http身份验证的服务器获取xml(或者我只是根本不知道该文档)文档。 如果您能向我展示实现我的目标的最好,最简单的方法,我将不胜感激。 问题答案: 您可以使用。例如: 这将设置默认值,并将在 所有 请求中使用。显然,当您不需要所有请求的凭据或多个不同的凭据(可

  • 问题内容: 使用HttpUrlConnection使用抢占式基本HTTP身份验证的最佳方法是什么。(假设现在我不能使用HttpClient)。 编辑以澄清问题:我使用Base64编码在请求标头中正确设置了un / pw。是否需要设置任何其他标志或属性,或者我是否在为请求的基本身份验证头设置抢先式基本身份验证所需的全部信息? 问题答案: 如果您使用的是Java 8或更高版本,则可以使用: 然后正常使

  • 我正在尝试实现一个简单的发布到URL,该URL在上接受正文中的基本身份验证。 我尝试过但我被,我的数据被发送到服务器。 我尝试的另一种方法是使用,但现在我遇到了一个不同的问题。身份验证工作完美,但数据没有发送到服务器... 为了确保,我在一个简单的Java项目(不是Android环境)中设置了一个小测试。 这是我用来到服务器的代码: Java项目中的代码运行良好。 当我在Android中尝试完全相

  • 问题内容: 从HttpClient 4.3开始,我一直在使用HttpClientBuilder。我正在连接到具有基本身份验证的REST服务。我将凭据设置如下: 但是,这不起作用(我正在使用的REST服务返回401)。怎么了? 问题答案: 从此处的 抢先身份验证 文档中: http://hc.apache.org/httpcomponents-client- ga/tutorial/html/aut

  • 问题内容: Jsoup中是否可以通过基本访问身份验证从网站加载文档? 问题答案: 使用HTTP基本访问身份验证时,您需要发送标头以及一个值。 例如(在Apache Commons Codec Base64的 帮助下): (为了简便起见,省略了字符编码的明确说明,因为登录名和密码通常很简单;此外,Base64总是生成字节)

  • 问题内容: 我想写书,所使用的一个一个的NodeJS REST的API服务器Joyent的,并且一切正常,除了我无法验证普通用户的身份验证。如果我跳到终端并执行,则无法在NodeJS http服务器上获取值username:password。如果我的NodeJS http服务器类似于 ,是否应该在来自回调的 req 对象中某处获取值username:password ?如何获得这些值而不必使用Co