我正在使用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发送到服务的最佳方法是什么?

最佳答案

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

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

@EnableSpringWebSession
public class SessionConfig {

    @Autowired
    HazelcastInstance hazelcastInstance;

    @Bean
    public ReactiveSessionRepository reactiveSessionRepository() {
        final IMap<String, Session> map = hazelcastInstance.getMap(MAP_CONFIG_NAME);
        return new ReactiveMapSessionRepository(map);
    }
}


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

07-24 09:47