Spring cloudFeignClient在RequestInterceptor中以编程方式发送标头

时间:2019-08-08 11:46:48

标签: spring-boot spring-cloud spring-cloud-config spring-cloud-feign

我正在从事一个Spring Boot项目,我应该通过Spring Cloud使用Feign调用rest api,我可以毫无问题地使用feignClient调用rest api, 现在我调用的其余api需要一个JWT才能使用它,以便从我的代码发送一个JWT,我使用了RequestInterceptor,这是我的代码:

class AuthInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        template.header("Authorization", "Bearer eyJraWQiOiJOcTVZWmUwNF8tazZfR3RySDZkenBWbHhkY1uV_1wSxWPGZui-t1Zf2BkbqZ_h44RkjVtQquIe0Yz9efWS6QZQ");

    }

}

我在代码中手动放置了JWT,这很好...

我的问题是:JWT在30分钟后过期,我应该手动调用另一个生成JWT的rest api,然后将其硬编码到我的代码中...

我的问题是:有什么解决方案可以以编程方式调用生成JWT的api,然后将此JWT注入到Interceptor中?

谢谢。

最好的问候。

1 个答案:

答案 0 :(得分:0)

从当前的 HttpServletRequest 标头中获取令牌。

public void apply(RequestTemplate template) {
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
            .getRequest();
    String jwtToken = request.getHeader(HttpHeaders.AUTHORIZATION);
    if (jwtToken != null) {
        template.header(HttpHeaders.AUTHORIZATION, jwtToken);
    }
}