相关疑难解决方法(0)

在Spring 3.1中使用Basic Auth进行RestTemplate

我们在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>
Run Code Online (Sandbox Code Playgroud)

但是,当我们尝试迁移到Spring 3.1时,不推荐使用CommonsClientHttpRequestFactory类,并且不再使用公共HttpClient.

我试图使用HttpComponentsClientHttpRequestFactory类和Apache HttpClient设置类似的配置,但没有得到如何设置凭据提供程序.

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

java spring restful-authentication resttemplate apache-httpclient-4.x

11
推荐指数
1
解决办法
2万
查看次数

Spring RestTemplate UnsupportedOperationException with Collections $ UnmodifiableCollection.add(Unknown Source)

这是我们的休息模板配置

@Bean
    public RestTemplate infoBloxRestTemplate() {
        RestTemplate restTemplate=new RestTemplate();
        ArrayList<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
        interceptors.add(httpBasicAuthenticationInterceptor());
        restTemplate.setInterceptors(interceptors);
        restTemplate.getMessageConverters().add(jacksonConverter());
        restTemplate.setRequestFactory(genericHttpRequestFactory());
        return restTemplate;
    }
Run Code Online (Sandbox Code Playgroud)

我们正在尝试进行POST调用,该调用与Postman一起成功运行并返回正确的响应.

final HttpHeaders headers = new HttpHeaders();
headers.add("Accept", "application/json");
headers.add("Content-Type", "application/json");

HttpEntity<Object> httpEntity = new HttpEntity<Object>(record, headers);

StringBuilder uri = new StringBuilder(infobloxRestClient.createUrl("/record:host"));
infobloxRestClient.getRestTemplate().exchange(uri.toString(), HttpMethod.POST, httpEntity, String.class);
Run Code Online (Sandbox Code Playgroud)

但是这个POST调用失败并出现以下错误.这是我的堆栈跟踪:

com.sun.xml.ws.server.sei.TieHandler createResponse
SEVERE: null
java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
    at org.springframework.http.HttpHeaders.add(HttpHeaders.java:558)
    at com.test.externalinterfaces.HTTPBasicAuthenticationInterceptor.intercept(HTTPBasicAuthenticationInterceptor.java:30)
    at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.execute(InterceptingClientHttpRequest.java:81)
    at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:67)
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:46)
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:49)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:488)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:452)
Run Code Online (Sandbox Code Playgroud)

在这方面的任何帮助将非常有帮助.

java spring resttemplate

5
推荐指数
1
解决办法
4759
查看次数

如何使用RestTemplate与Basic Auth

如何使用Apache httpclient 4.3.2从Spring 4.0.3.RELEASE配置RestTemplate?我跟着代码SO 这里,并在这里,甚至可以从Apache的这里,似乎很简单,但它从来没有为我工作.我可以验证在使用curl和postman时是否正确发送了Authorization标头,但是从未使用以下代码发送Authorization标头:

public RestTemplate createBasicAuthTemplate(String username, String password) {
    BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
    HttpClient httpClient = HttpClientBuilder.create()
            .setDefaultCredentialsProvider(credentialsProvider)
            .build();

    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
    RestTemplate template = new RestTemplate(requestFactory);

    return template;
}
Run Code Online (Sandbox Code Playgroud)

并且代码被调用如下:

RestTemplate basicAuth = createBasicAuthTemplate("user@app.com", "password");
ResponseEntity<String> response = basicAuth.getForEntity(url, String.class);
Run Code Online (Sandbox Code Playgroud)

所以问题是:如何使用Apache httpclient 4.3.2从Spring 4.0.3.RELEASE配置RestTemplate?还有其他部分缺少上述代码吗?在上面的代码中是使用正确方法的RestTemplate吗?

spring spring-mvc apache-httpclient-4.x

3
推荐指数
1
解决办法
6251
查看次数