我正在使用Spring Boot编写一个与HTTP rest服务器交互的应用程序。我正在连接的服务器之一(Wit.ai)使用beaerer授权令牌。产生成功响应的curl请求如下所示:
GET /message?q=sample message HTTP/1.1
Host: api.wit.ai
Authorization: Bearer XXXXXXXXXXXXX
Cache-Control: no-cache
Postman-Token: 526c3a11-8e61-4552-aa19-e913f6473753
wit.ai文档说出关于令牌的以下内容,
Wit.ai使用OAuth2作为授权层。因此,每个API请求都必须包含带有令牌的Authorize HTTP标头 访问令牌是特定于应用程序的。
我正在尝试使用@FeignClient在Spring Boot应用程序中向此端点发送GET请求。但是我端点似乎不接受我的授权令牌。 这是我的FeignClient代码
@FeignClient(name="witGetter", url = "${wit.url}")
public interface WitGetter {
@RequestMapping(method = RequestMethod.GET, value = "/message?v=20180507q={text}",
headers = {"Authorization: Bearer XXXXXXXXXXXXX"})
WitResponse getWitResponse(@PathVariable("text") final String text);
}
传递此类授权令牌的正确方法是什么?我尝试过其他一些东西,但无济于事。谢谢你的任何建议!!!
顺便说一下,下面的代码使用传统的Feign接口,但在这种情况下我需要使用@FeignClient。
public interface WitGetter {
@Headers("Authorization: Bearer XXXXXXXXXXXXX")
@RequestLine("GET /message?q={text}")
WitResponse getWitResponse(@Param("text") String text);
}
(以下代码位于单独的配置文件中)
@Bean
public WitGetter defaultWitGetter(@Value("https://api.wit.ai") final String witUrl){
return Feign.builder().decoder(new GsonDecoder()).target(WitGetter.class, witUrl);
}
修改
使用上述代码时得到的错误代码是:
线程“main”中的异常feign.FeignException:status 400读取WitGetter #getWitResponse(String,String);内容: { “错误”:“认证错误,检查令牌/参数”, “code”:“no-auth” }
答案 0 :(得分:8)
通过Spring Cloud使用Feign时,您可以像定义标准的Spring MVC控制器一样使用它。
请在此处查看我的文章,了解如何使用Feign传递标题:http://blog.arnoldgalovics.com/2018/02/15/passing-headers-with-spring-cloud-feign/
快速提示:您可以在方法定义中添加@RequestHeader("Authorization") String bearerToken
参数。
然后当然称之为client.method(..., "Bearer " + token)