gpt4 book ai didi

java - 如何访问WebFlux服务中的WebSession?

转载 作者:行者123 更新时间:2023-12-02 00:53:26 24 4
gpt4 key购买 nike

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

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

现在,在类服务中,他们可能需要一些WebSession信息(例如客户端IP、客户端 session 属性等)。除了下面的例子之外,没有办法做到这一点吗?

@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 表单 Controller ,然后将其发送到我的所有服务,我希望能够在我的服务中注入(inject) WebSession(例如 @Autowired WebSession webSession),或者我想要在AOP中使用WebSession。是否可以?如果是,如何?如果没有,将 WebSession 发送到服务的最佳方式是什么?

最佳答案

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

配置 Spring session 以使用 Hazelcast map 确保添加@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

关于java - 如何访问WebFlux服务中的WebSession?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57840086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com