微服务之间的认证解决方案——FeignInterceptor

1.1 订单微服务接入认证
1). pom.xml

org.springframework.cloud
spring-cloud-starter-oauth2

2). 引入公钥 public.key
3). 引入配置 ResourceServerConfig
1.2 微服务之间的认证
1). 当前问题

在这里插入图片描述
2). 解决方案
通过Feign拦截器, 在通过Feign进行远程调用时, 对请求增加头信息, 让头信息 Authorization 继续往下传递 ;
3). 代码实现
A. 在Common中定义FeignInterceptor
@Component
public class FeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
// 传递令牌
// 1.获取request请求
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (requestAttributes != null){
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
// 2.获取所有的请求头
if (request != null){
Enumeration headerNames = request.getHeaderNames();
// 3.遍历所有的请求头名称
while (headerNames.hasMoreElements()){
String headerName = headerNames.nextElement();
// 4.判断如果有Authorization 的请求头,则传递令牌
if (“authorization”.equals(headerName)){
String headerValue = request.getHeader(headerName);
requestTemplate.header(headerName,headerValue);
}
}
}
}
}
}

B. 在Feign远程调用发起微服务中声明该Bean
@Bean
public FeignInterceptor feignInterceptor(){
return new FeignInterceptor();
}

发布了120 篇原创文章 · 获赞 9 · 访问量 7349

猜你喜欢

转载自blog.csdn.net/weixin_44993313/article/details/104583940
今日推荐