如何在WebFlux服务中访问WebSession?

时间:2019-09-08 07:52:01

标签: java reactive-programming spring-webflux spring-session

我正在使用spring-webflux,并且我想在一个请求的某些不同类中使用WebSession。例如:应用程序具有一些分析服务。客户想要运行其中的一些。他们发送一个请求,然后在控制器中运行类似于以下内容的

classService1.analyze()
classService2.analyze()
classService3.analyze()

现在,在类服务中,他们可能需要一些WebSession信息(例如客户端IP,客户端会话属性和.etc)。除了下面的示例,没有其他方法可以做到这一点吗?

@RestController
class AnalyzeController() {

   @Autowired
   private ClassService1 classService1

   // Other injected class services

   @PostMapping("/analyze")
   public void analyze(WebSession webSession){
      classService1.analyze(webSession)
      classService2.analyze(webSession)
      // ...
   }
}

我不想获取webSession表单控制器,然后将其发送到我的所有服务,我希望有可能在我的服务中注入WebSession(例如@Autowired WebSession webSession),或者我想在AOP中使用WebSession。可能吗?如果是,如何?如果没有,将WebSession发送到服务的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

https://docs.spring.io/spring-session/docs/current/reference/html5/#websession文档提供了对带有Redis的WebSession的支持,但是如果您不想维护Redis集群的开销。您可以将内存中会话群集与Hazelcast一起使用。

配置春季会议以使用Hazelcast映射 确保添加@EnableSpringWebSession。 创建一个ReactiveSessionRepository Bean,用于包装Hazelcast实例的地图。

{{1}}

并创建一个Config bean,因为Spring Boot使用它来自动配置Hazelcast实例 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-hazelcast.html