Spring Cloud中Feign如何统一设置验证token

代码地址:https://github.com/hbbliyong/springcloud.git

原理是通过每个微服务请求之前都从认证服务获取认证之后的token,然后将token放入到请求头中带过去,这样被调用方通过验证token来判断是否合法请求

我们也在zuul中通过前置过滤器来统一设置token, 其实还漏掉了一种,那就是业务服务调用业务服务的时候,是没有zuul这种前置过滤器的,那么我们该如何设置呢?

其实也挺简单的,因为我们服务之前的调用是依赖于Feign的,我们可以从Feign上来做文章

如果你仔细看过Feign的文档的话,肯定会注意到下面一段代码:

tatic class DynamicAuthTokenTarget<T> implements Target<T> {
public DynamicAuthTokenTarget(Class<T> clazz,
UrlAndTokenProvider provider,
ThreadLocal<String> requestIdProvider);
...
@Override
public Request apply(RequestTemplate input) {
TokenIdAndPublicURL urlAndToken = provider.get();
if (input.url().indexOf("http") != 0) {
input.insert(0, urlAndToken.publicURL);
}
input.header("X-Auth-Token", urlAndToken.tokenId);
input.header("X-Request-ID", requestIdProvider.get());

return input.request();
}
}
...
Bank bank = Feign.builder()
.target(new DynamicAuthTokenTarget(Bank.class, provider, requestIdProvider));

  


我们可以为Feign设置一个请求拦截器,在调用之前做一些事情,添加请求头信息

原生的Feign都能添加拦截器,Spring Cloud中那肯定也是可以的

前面的文章中我们讲过通过自定义配置来覆盖默认配置,我们创建了一个FeignConfiguration配置类来配置Feign的日志

今天终于又派上用场了, 可以在这边自定义一个拦截器

@Configuration
public class FeignConfiguration {
/**
* 日志级别
* @return
*/
@Bean 
Logger.Level feignLoggerLevel() { 
return Logger.Level.FULL; 
}

/**
* 创建Feign请求拦截器,在发送请求前设置认证的token,各个微服务将token设置到环境变量中来达到通用
* @return
*/
@Bean
public FeignBasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new FeignBasicAuthRequestInterceptor();
}

}

/**
* Feign请求拦截器
* @author yinjihuan
* @create 2017-11-10 17:25
**/
public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {

public FeignBasicAuthRequestInterceptor() {

}

@Override
public void apply(RequestTemplate template) {
template.header("Authorization", System.getProperty("fangjia.auth.token"));
}
}

  

大致的步骤呢就是通过设置Feign的拦截器来设置token, 因为这边是通用的,所有呢token的值通过环境变量来传递

每个微服务只需要将获取的token信息设置到环境变量中即可

System.setProperty("fangjia.auth.token", token);

上次我们也讲过如果来自动获取token,我们是通过定时任务来定时刷新的,当时还创建了AuthService来获取token

今天在优化下,因为这个也需要通用,所以直接将Service去掉了

/**
* 定时刷新token
*
* @author yinjihuan
* @create 2017-11-09 15:39
**/
@Component
public class TokenScheduledTask {
private static Logger logger = LoggerFactory.getLogger(TokenScheduledTask.class);

public final static long ONE_Minute = 60 * 1000 * 60 * 20;

@Autowired
private AuthRemoteClient authRemoteClient;

/**
* 刷新Token
*/
@Scheduled(fixedDelay = ONE_Minute)
public void reloadApiToken() {
String token = this.getToken();
while (StringUtils.isBlank(token)) {
try {
Thread.sleep(1000);
token = this.getToken();
} catch (InterruptedException e) {
logger.error("", e);
}
}
System.setProperty("fangjia.auth.token", token);
}

public String getToken() {
AuthQuery query = new AuthQuery();
query.setAccessKey("1");
query.setSecretKey("1");
ResponseData response = authRemoteClient.auth(query);
return response.getData() == null ? "" : response.getData().toString();
}
}

  

到现在,各个微服务直接的安全认证就结束啦,用起来不麻烦,下面总结下

定义一个用于认证的微服务,可以有用户信息,和业务无关,提供认证接口
定义JWT工具类,提供生成token和检查token的方法,公用
定义认证token的过滤器,公用
在需要认证的微服务中注册过滤器即可实现拦截操作, 也可做成公用的,就是所有都需要认证
在调用方配置TokenScheduledTask,实现定时刷新token, 也可做成公用的
如果不需要认证,那么不注册拦截过滤器即可,也不用 TokenScheduledTask,对业务代码无任何倾入性

转载于:https://www.cnblogs.com/smiler/p/10690303.html

springcloud feign跨服务调用传递token问题 项目场景: 微服务之间跨服务调用使用 问题描述: 提示:这里描述项目中遇到的问题: 例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据 APP 中接收数据代码: /** * Fegin动态调用 */ //导入SpringCloud默认的Feign配置 @Import(FeignClientsConfiguration.class) @Component public class CommonFeginApi { CommonFeginService commonFeginSer 阅读详情

相关推荐

spring cloud Feign oauth2令牌传递

创建feign的配置类 /** * Feign配置 **/ @Configuration public class FeignConfiguration { /** * 日志级别 * @return */ @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } /** * 创建Feign请求拦截器,在发送请求前设置认证的t

无名剑 1034

spring cloud Feign 微服务服务之间调用传递token

问题: 微服务调用需要验证token,而且token放在header里 解决: import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import

【设计改变世界】github地址:https://github.com/guochunyang2004 1733

微服务安全实战:基于Spring Cloud Alibaba与OAuth 2.0构建统一认证授权体系

在分布式微服务架构中,服务间安全认证与授权是保障系统安全的核心挑战。OAuth 2.0作为工业级授权框架,通过标准化流程实现资源访问的委托授权,其核心原理是分离认证与授权职责,引入授权服务器、资源服务器等角色。该技术价值在于实现认证逻辑集中化、资源服务无状态化,有效解决微服务场景下用户身份统一识别与权限管控难题。典型应用场景包括前端应用访问后端多服务、服务间内部调用等。本文以Spring Cloud Alibaba生态为基础,结合JWT(JSON Web Token)与Spring Authorizatio

weixin_30764771的博客 467

springcloud使用feign携带token调用服务

springboot和springCloud版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>...

a1430490717的博客 1988

【Spring】Feign客户端发送HTTPS请求绕过认证

1.概述 转载:https://www.jianshu.com/p/ea627708ab52 一个Spring Boot项目,为了使用Harbor仓库,起初通过Spring RestTemplate完成了对Harbor仓库的HTTPS请求,后想改为使用Feign客户端的方式请求Harbor仓库。 2.配置过程 1、pom文件依赖添加 <dependency> <groupId>org.springframework.cloud</groupId> &lt.

九师兄 3863

海康视觉平台VisionMaster实战入门:从通讯配置到工具应用

本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。

weixin_29224309的博客 1006

Spring Cloud GateWay实现token的校验和传输

Spring Cloud GateWay实现token的校验和传输 1.1 SpringCloud Gateway 简介 Spring Cloud GateWay基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty. Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。 提前声明:Spring Cloud Gateway 底层使用了高性能的通

xingxinggua9620的博客 8962

同步整流buck电路图设计:手把手入门必看

从零开始拆解同步整流Buck电路图及其原理,手把手带你画出关键拓扑、选型MOSFET、分析续流路径。重点讲清占空比控制逻辑与体二极管导通损耗的规避方法,让buck电路图及其原理真正落地可调、稳定可靠。

weixin_33308579的博客 995

feign调用 服务内无token_解决spring cloud feign模式下 访问服务统一认证的问题

前面全面讲解了spring cloud 统一安全认证 搭建,参考spring cloud oauth2 微服务 统一认证授权 框架搭建。也解决了解决spring cloud feign模式下 访问服务统一认证的问题,这里单独提出来一下。使用@FeignClient 来实现无感知url调用服务,但是服务间调用接口时,是不包含token的,所以,我们要加下面的配置类,来将token放入feig...

weixin_34698121的博客 1809

如何使用Ray和PyTorch训练模型

用户编写训练函数 → 定义单机训练逻辑。通过扩缩容配置 → 指定需要多少资源(Worker 数量、CPU/GPU)。训练器整合训练函数和配置 → 自动将训练函数分发到多个 Worker 上并行执行。Worker 运行训练函数 → 在分布式环境中完成模型训练。通过这种模式,Ray Train 实现了对分布式训练的抽象,用户只需关注单机训练逻辑,无需手动管理分布式通信和资源分配。

m0_62464865的博客 1922

Ubuntu20.04 安装 MATLAB R2023b 常见问题及解决方案

本文提供了Ubuntu20.04系统上安装MATLAB R2023b的完整指南,包括系统要求检查、依赖项安装、详细安装步骤及常见问题解决方案。特别针对GTK模块加载失败、OpenGL图形加速问题和中文显示乱码等常见问题提供了有效解决方法,帮助用户顺利完成安装并优化使用体验。

weixin_42619061的博客 483

【Spring Cloud】feign调用携带token

由于feign的线程没有被Ttl装饰,所以只有继承性,没有全局关联性,等同于InheritableThreadLocal,若需要对应功能需要确保Feign线程正确地使用了TTL装饰器。是只有在线程初始化的时候才会进行初始化复制,所以后续父线程数据更改的时候不会进行同步,如下所示。但是使用这个的时候由于fegin子父线程或线程池复用问题,导致获取到的。不存在或者获取到的是之前请求的老数据,所以我们要使用可继承的。由此,可以对以上方法进行升级一步到位,集成阿里的。所以要使用如下方法重新执行一下。

生如夏花的博客 3756

Autosar Os降低CPU负载的方案总结

由于各个项目的实际场景不尽相同,可能需要有针对性的对症优化。如果你还有别的一些优化手段欢迎留言交流。

3676

spring cloud各个微服务之间如何相互调用(Feign、Feign带token访问服务接口)

1、首先先看什么是Feign。 这里引用“大漠知秋”的博文https://blog.youkuaiyun.com/wo18237095579/article/details/83343915 2、若其他服务的接口未做权限处理,参照上文第1点的博文即可。 3、若其他服务的接口做了权限的处理(例如OAuth 2)时该如何访问? a、有做权限处理的服务接口直接调用会造成调用时出现http 401未授权的错误...

E的博客 2万+

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(1-16)

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(1-16)

weixin_45735391的博客 8万+

YOLOv11训练:Roboflow免费数据集获取与格式转换超详细教程

公共数据集库:包含超过20,000个开源数据集数据标注工具:支持在线标注和团队协作数据预处理:自动增强、扩充和格式化版本控制:像管理代码一样管理数据集版本多格式导出:支持所有主流目标检测格式import cv2# 加载图像# 加载标注# 数据增强# 调整尺寸# 调整标注坐标# 转换为Tensor# 实现保持长宽比的resize逻辑pass# 坐标转换逻辑pass# 数据增强实现pass数据集选择优先选择Roboflow上标注质量高的官方数据集。

weixin_39818775的博客 2359

Feign调用前统一申请Token传递到调用的服务中

如果项目中用的是 HttpClient 或者 RestTemplate 之类的调用接口,则可以在调用之前申请 Token,然后将其塞到请求头中。 在Spring Cloud中消费接口肯定是用 Feign 来做的,这意味着我们需要对 Feign 进行改造,需要往请求头中塞上我们申请好的 Token。 1. 定义请求拦截器 对于 Token 的传递操作,最好在框架层面进行封装,对使用者透明,这...

竹林幽深 366

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Feign携带token

Feign有提供一个接口,RequestInterceptor;只要实现这个接口,简单做一些处理,比如说我们验证请求头的token叫Access-Token,我们就先取出当前请求的token,然后放到feign请求头上; 新建配置类 @Configuration public class FeignConfig implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate

qq_39845279的博客 3492

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

最全面的总结spring cloud Feign的常见问题

feign的踩坑集锦,包括 Method XXX not annotated with HTTP method type (ex. GET, POST)以及feign.FeignException: status 400,助你踩坑一臂之力。

cuiyaocool的博客 2151

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

使用Feign调用添加验证信息token到请求头

参考:https://blog.youkuaiyun.com/crystalqy/article/details/79083857 参考:https://blog.youkuaiyun.com/lidai352710967/article/details/88680173 1、这是最简单的一个方法,但是需要对每个调用都一一添加,就是使用@RequestHeader注解添加参数到请求头中去 @FeignClient...

fuck487的博客 1491

fegin通过header传递token信息到下游服务

项目中,使用gateway作为统一的网关入口,进行token的校验后,会将token解析后的userId和phone等信息放到request的请求头中,到fegin后,需要进行拦截后发送给下游服务。 1.使用的fegin依赖 <dependency> <groupId>org.springframework.cloud</groupId> ...

蓝色格子ren的博客 2050

解决spring cloud Feign远程调用服务,添加headers解决拦截器拦截问题

使用spring cloud 做saas服务器时,经常会通过Feign调用远程服务。有时候我们的远程服务可能做了某些权限验证。需要验证header或者token什么的。如果某没有token,可能会被阻止调用。那如何添加token呢。如果每个方法都手动设置headers,那未免太麻烦。可以通过一个切面,自动帮我们添加请求header。直接上代码:@Configuration public class...

Gogym的博客 1万+

【Spring Cloud】Spring Cloud Feign 携带 Token

在 Spring Cloud 微服务架构体系中,通常使用 Feign 作为服务之间的通信组件,但是在某些场景下我们对某个服务做了权限拦截,例如 Shiro 或者 Spring Security,往往需要验证 token。 使用 Feign 如何解决 token 的问题呢? 可以先获取原 token,重新转发 token @Configuration public class FeignConfig implements RequestInterceptor { @Override publi

Yuu 751

spring cloud 非web请求feign调用header携带数据

首先,在我之前的博文中我们介绍了feign调用携带token的解决放法,但是那仅适用于前端发起请求从controller层进入service层产生微服务之间的调用问题。实际开发场景中我们可能遇到很多非web请求,比如定时任务等 在之前的基础上我们继续编程,直接上代码 @Configuration public class FeignConfig implements RequestInterceptor { @Override public void apply(RequestTemp

K_Men的博客 1469
上一篇: FeignClient注解及参数
下一篇: 为类创建自定义调试信息,让你的调试更加方便快捷
dddp75921
博客等级 码龄12年 9粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值