J K*_*urz 3 rest spring spring-boot
在Spring Boot中,我正在尝试创建一个RestTemplate,它将使用基本身份验证
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
builder.basicAuthorization("username", "password");
RestTemplate template = builder.build();
return template;
}
Run Code Online (Sandbox Code Playgroud)
然后我将RestTemplate注入我的服务类中
@Autowired
private RestTemplate restTemplate;
Run Code Online (Sandbox Code Playgroud)
但是,我的请求因401未经授权的例外而失败:
Caused by: org.springframework.web.client.HttpClientErrorException: 401 Unauthorized
Run Code Online (Sandbox Code Playgroud)
使用另一个REST客户端(邮递员)对同一URL的请求成功,因此我假设基本身份验证无法正常工作.从调试输出看起来好像没有设置身份验证标头.什么使这项工作?
M. *_*num 13
问题是你使用的RestTemplateBuilder是错误的方式.这RestTemplateBuilder是不可改变的.所以当builder.basicAuthorization("username", "password")你真正得到一个新实例时,BasicAuthorizationInterceptor添加并配置了RestTemplateBuilder.(这适用于它们的所有配置方法RestTemplateBuilder都创建一个新复制的实例).
但是,您的代码正在丢弃特定配置的实例,并且您基本上使用的是非安全默认值RestTemplateBuilder.
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
builder.basicAuthorization("username", "password");
RestTemplate template = builder.build();
return template;
}
Run Code Online (Sandbox Code Playgroud)
此代码应替换为此类代码.
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.basicAuthorization("username", "password").build();
}
Run Code Online (Sandbox Code Playgroud)
哪个将使用特定配置的实例.
一种解决方案是创建 RestTemplate,如下所示:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
RestTemplate template = builder.build();
template.setMessageConverters(
Arrays.asList(
new FormHttpMessageConverter(),
new StringHttpMessageConverter()
)
);
template.getInterceptors().add(new BasicAuthorizationInterceptor("username", "password"));
return template;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7528 次 |
| 最近记录: |