Java shareSecurityContext如何在SpringCloud中与Hystrix一起工作?

Java shareSecurityContext如何在SpringCloud中与Hystrix一起工作?,java,spring-boot,spring-security,microservices,spring-cloud,Java,Spring Boot,Spring Security,Microservices,Spring Cloud,我正在学习SpringCloud的工作原理,并使用其中一个最流行的技术堆栈:Eureka、Zuul、Hystrix、Ribbon、Feign。除了registry之外,config server和gateway my services与Spring Cloud版本2.2.1.RELEASE具有以下依赖关系: <dependency> <groupId>org.springframework.cloud</groupId> <artifac

我正在学习SpringCloud的工作原理,并使用其中一个最流行的技术堆栈:Eureka、Zuul、Hystrix、Ribbon、Feign。除了registry之外,config server和gateway my services与Spring Cloud版本2.2.1.RELEASE具有以下依赖关系:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>

org.springframework.cloud
SpringCloudStarter配置
${spring cloud.version}
org.springframework.cloud
spring cloud starter netflix eureka客户端
${spring cloud.version}
org.springframework.cloud
斯普林云侦探
${spring cloud.version}
org.springframework.cloud
春季云启动程序
${spring cloud.version}
org.springframework.cloud
spring cloud starter netflix hystrix
${spring cloud.version}
我在网关上使用JWT进行授权,并希望在其他服务上使用相同的授权对象。显然,这样做的方法是用一个头来传输我的JWT,但我在文档中读到,Hystrix可以只使用一个属性来传播整个安全上下文Hystrix.shareSecurityContext=true。我曾尝试使用假客户端和Zuul来实现,但请求服务上的SecurityContext只包含匿名用户

我花了两天时间来理解它是如何工作的,但我没有。在Faign的日志中,我没有看到任何类似Principal的标题

所以我的问题是:如果第二个服务在其他docker容器或其他服务器上运行,是否可以使用Zuul和Faign传输安全上下文?如果不是,传输授权用户数据的最佳实践是什么


谢谢

你发布这个问题已经8个月了,但我还是会回答的。 正如您所知,服务本质上是分布式的,因此它们可能不共享JVM,甚至可能根本不是用java开发的。JWT令牌的目的是保护这些分布式服务,因此它们之间发生的任何关于安全性的通信都只能通过授权头进行。在授权报头中,一个服务将JWT令牌(仅承载)传递给另一个服务,该服务验证令牌,从中读取信息,等等。 然而,hystrix.shareContext还有另一个用途。在Spring中,当创建应用程序上下文时,默认情况下不会将其传递给Hystrix线程。为了使它对Hystrix可用,该属性被设置为true,这从本质上改变了Hystrix的并发策略。因此,它将安全上下文传递给“Hystrix的线程”,该线程是同一服务的一部分,而不是其他服务的一部分

希望这能解决你的疑问