Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Spring Boot和@FeignClient发送承载授权令牌_Spring_Rest_Spring Boot_Wit.ai_Feign - Fatal编程技术网

如何使用Spring Boot和@FeignClient发送承载授权令牌

如何使用Spring Boot和@FeignClient发送承载授权令牌,spring,rest,spring-boot,wit.ai,feign,Spring,Rest,Spring Boot,Wit.ai,Feign,我正在使用SpringBoot编写一个与HTTPREST服务器交互的应用程序。我连接到的其中一台服务器(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-e9

我正在使用SpringBoot编写一个与HTTPREST服务器交互的应用程序。我连接到的其中一台服务器(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文档对代币做了如下描述:

ai使用OAuth2作为授权层。因此,每个API请求都必须包含一个带有令牌的授权HTTP头 访问令牌是特定于应用程序的

我正在尝试使用@FeignClient在Spring启动应用程序中向该端点发送GET请求。但是,我发现端点似乎不接受我的授权令牌。 这是我的假客户端代码

@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);
}
(以下代码位于单独的配置文件中)

}

编辑

使用上述代码时,我得到的错误代码是:

线程“main”feign.FeignException中的异常:状态400正在读取WitGetter#getWitResponse(字符串,字符串);内容: { “错误”:“身份验证错误,请检查令牌/参数”, “代码”:“无身份验证” }


当通过SpringCloud使用FIGN时,您可以像定义标准SpringMVC控制器一样使用它

请在此处查看我关于使用Feign传递标题的文章:

快速提示:您可以将
@RequestHeader(“授权”)字符串bearerToken
参数添加到方法定义中


然后当然像调用
client.method(…,“Bearer”+token)

我想让这个
bearerToken
应用程序属性
文件中获取。对于代理接口,它们是常量,但在生产和登台环境中是可变的。最好的方法是什么?伪代理接口不允许我使用
@Value
,我不想在我的代码中硬编码这个令牌有没有办法使用过滤器来实现这一点?只需在一个简单的过滤器中完成,而不是针对来自外国客户的每个请求。@CarlosCruz是的,请参考以下内容:
@Bean
    public WitGetter defaultWitGetter(@Value("https://api.wit.ai") final String witUrl){
        return Feign.builder().decoder(new GsonDecoder()).target(WitGetter.class, witUrl);