【问题标题】:How access WebSession in WebFlux services?如何在 WebFlux 服务中访问 WebSession?
【发布时间】:2019-09-08 07:52:01
【问题描述】:

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

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

现在,在 Class Services 中,他们可能需要一些 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 发送到服务的最佳方式是什么?

【问题讨论】:

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


    【解决方案1】:

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

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

    @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

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 2018-05-04
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 2017-11-30
      • 2014-07-07
      相关资源
      最近更新 更多