Spring Cloud之Feign调用token丢失
来源:互联网 发布:php删除相同前缀文件 编辑:程序博客网 时间:2024/06/05 19:01
开始前
在Spring Cloud中,我想大家对于Feign应该不陌生了吧。这里就不作介绍了。
之前在多个群里都看到有人在问这样一个问题,在加了授权认证之后,不管是JWT也好,Security也好,Feign调用总是没有权限。
其实我们知道不管是选择哪种,最终token都是放在请求头里面,访问时携带以通过认证。
可是当使用Feign时就会发现这样一个问题,外部请求到A服务的时候,A服务是可以拿到token(认证信息)的,然而当A使用Feign调用B服务时,token就会丢失,进而认证失败,权限不足。
解决方式
这时候我们需要做的就是在Feign调用的时候,向其请求头里面添加上我们的token
我们需要实现Feign提供的一个接口RequestInterceptor
这里简单实现一下,假设我们在验证权限的时候放在请求头里面的就叫token,我们先获取当前请求中的token,然后放到Feign的请求头上,当然具体还是要根据你们的业务来
public class FeignConfig implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { requestTemplate.header("token", getHeaders(getHttpServletRequest()).get("token")); } private HttpServletRequest getHttpServletRequest() { try { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } catch (Exception e) { return null; } } private Map<String, String> getHeaders(HttpServletRequest request) { Map<String, String> map = new LinkedHashMap<>(); Enumeration<String> enumeration = request.getHeaderNames(); while (enumeration.hasMoreElements()) { String key = enumeration.nextElement(); String value = request.getHeader(key); map.put(key, value); } return map; }}
这里就简单实现了一个RequestInterceptor
,但是怎么用呢,其实很简单,我们在@FeignClient
注解里面的属性加上configuration = FeignConfig.class
就可以了
@FeignClient(value = "oss-server", configuration = FeignConfig.class)public interface OssClient {}
这时候再调用就会发现已经携带token了。
最后
其实实现了RequestInterceptor
后,直接使用@Configuration
注解,不在FeignClient里面加属性也是可以的。
这个相对还是比较简单的,代码就不上了。
阅读全文
0 0
- Spring Cloud之Feign调用token丢失
- 【Spring Cloud】Feign接口调用
- Spring Cloud之Feign入门
- spring cloud之feign(四)
- spring cloud feign 调用服务注意问题
- Spring Cloud 声明式服务调用 Feign
- 使用Spring Cloud Feign远程调用
- 声明式服务调用:Spring Cloud Feign
- spring cloud Feign(声明式服务调用)
- Spring Cloud中Feign如何统一设置验证token
- Spring Cloud微服务(7)之Feign服务之间调用
- 06.Spring Cloud学习笔记之声明式服务调用组件Feign
- Spring Cloud feign
- Spring Cloud Feign诠释
- spring cloud-feign
- Spring Cloud Feign常见问题
- spring cloud Feign
- spring cloud feign
- STM32F4开发板学习笔记一
- Spark SQL 之 Join 实现
- 图像压缩
- 深度学习之可视化ZFNet-解卷积
- VC++中定时器SetTimer函数的应用总结
- Spring Cloud之Feign调用token丢失
- Batch Normalization
- Datatables 行数据删除、行上升、行下降功能演示
- 在OpenLayers4中将地图及叠加显示的图层生成图片保存到数据库方法
- 第六次作业窗口JFrame的设计
- 形象的解释神经网络激活函数的作用
- myeclipse 设置字体大小
- CentOS 7安装部署Solr 7.1:记一次踩坑填坑经历
- annaconda + tensorflow + pycharm 安装简记