我正在使用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