feign远程调用没有权限问题分析与解决

#问题描述

在这里插入图片描述
#原因分析

Feign在进行远程调用时, 默认是没有将请求头继续往下传递的, 而在调用接入认证的微服务时, 必须携带JWT令牌才可以访问, 没有携带令牌就访问, 就会出现401 , 未认证 错误 。

#解决方案

使用Feign的拦截器来解决, 拦截所有的feign的远程调用, 在进行远程调用时, 拦截住请求, 并让请求头Authorization 继续往下传递 。

#示例代码

@Component
public class FeignInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        if(requestAttributes != null){
            HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
            String authorization = request.getHeader("Authorization");
            template.header("Authorization", authorization);

        }
    }
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐