专栏首页史上最简单的Spring Cloud教程JWT如何在Spring Cloud微服务系统中在服务相互调时传递

JWT如何在Spring Cloud微服务系统中在服务相互调时传递

在微服务系统中,为了保证微服务系统的安全,常常使用jwt来鉴权,但是服务内部的相互调用呢。经常有人在微信上问我,我给出一个解决办法,采用Feign的拦截器。

在Feign中开启了hystrix,hystrix默认采用的是线程池作为隔离策略。线程隔离有一个难点需要处理,即隔离的线程无法获取当前请求线程的Jwt,这用ThredLocal类可以去解决,但是比较麻烦,所以我才用的是信号量模式。 在application.yml配置文件中使用一下配置:

hystrix.command.default.execution.isolation.strategy: SEMAPHORE

写一个Feign的拦截器,Feign在发送网络请求之前会执行以下的拦截器,代码如下:

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;

/**
 * Created by fangzhipeng on 2017/7/28.
 */
@Component
public class JwtFeignInterceptor implements RequestInterceptor {

    private final String key = "Authorization";


    @Override
    public void apply(RequestTemplate template) {

        if (!template.headers().containsKey(key)) {
            String currentToken = UserUtils.getCurrentToken();
            if (!StrUtil.isEmpty(currentToken)){
                template.header(key, currentToken);
            }
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java并发编程:JMM和volatile关键字

    Java内存模型 随着计算机的CPU的飞速发展,CPU的运算能力已经远远超出了从主内存(运行内存)中读取的数据的能力,为了解决这个问题,CPU厂商设计出了CPU...

    方志朋
  • 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

    在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件。它就是Spring Cloud Config。 一、简介 在分布式系统中,由于...

    方志朋
  • SpringBoot非官方教程 | 终章:文章汇总

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csd...

    方志朋
  • Python 字典(Dictionary) has_key()方法

    Python 字典(Dictionary) has_key() 函数用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。

    周小董
  • React.js 集成 Spring Boot 开发 Web 应用

    使用文档: https://nowa-webpack.github.io/nowa/

    一个会写诗的程序员
  • 在linux运行Tensorflow代码所遇到的问题

    1,OSError: Unable to open file (file locking disabled on this file system (use H...

    Dean0731
  • 经典算法题-公交车问题

    cwl_java
  • 【redis】02-redis持久化存储以及对象存储

    redis存储对象主要有两种方式: (1)采用json序列化成字符串的方式进行存储 (2)采用二进制的方式进行存储

    envoke
  • 一则数据库无法重启的案例分析(r8笔记第96天)

    今天一个开发的同事找到我,说有个问题想咨询一下我,突然想起他昨天让我帮他处理一个工单,他这么一问我才想起来还没做,结果他说是另外一件事,说有个开 发测试的环境,...

    jeanron100
  • Python第九课:参数

    这一节我们学另外一个很酷的东西,叫做参数变量 argv。事实上 argv= argument variable,它是一种在输入运行命令的时候向程序输入的一种方式...

    HuangWeiAI

扫码关注云+社区

领取腾讯云代金券