|
该版本仍在开发中,尚未被视为稳定。最新稳定版请使用Spring Session 3.5.3! |
WebSession 集成
Spring Session 提供了与 Spring WebFlux 的透明集成网络会话.
这意味着你可以切换网络会话实现时,Spring Session支持的实现。
为什么选择春季课程和网络课程?
我们已经提到,Spring Session 提供了与 Spring WebFlux 的透明集成网络会话但我们从中获得了什么好处?
如同HttpSessionSpring Session 使得支持集群会话变得轻松,而无需依赖于特定应用容器的解决方案。
与Redis的网络会议
使用 Spring Session网络会话通过注册 a 实现WebSessionManager实现由Spring Session支持ReactiveSessionRepository.
Spring配置负责创建WebSessionManager取代了网络会话实现时,采用由 Spring Session 支持的实现。为此,添加以下 Spring 配置:
@EnableRedisWebSession (1)
public class SessionConfiguration {
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(); (2)
}
}
| 1 | 这@EnableRedisWebSession注释生成一个名为webSessionManager.那个豆子实现了WebSessionManager.
这就是负责替换网络会话实现由 Spring Session 支持。在此情况下,Spring Session 由 Redis 支持。 |
| 2 | 我们创建一个RedisConnection工厂它将 Spring Session 连接到 Redis 服务器。
我们配置连接连接默认端口(6379)的本地主机
有关配置 Spring Data Redis 的更多信息,请参阅参考文档。 |
WebSession 集成的工作原理
Spring Session 与 Spring WebFlux 及其网络会话与 Servlet API 及其HttpSession.
Spring WebFlux 提供了网络会话商店API,提供了持久化的策略网络会话.
本节介绍了Spring Session如何提供透明的集成网络会话. 我们提供这些内容,是为了让你了解幕后发生的事情。这些功能已经集成了,你无需自己实现这些逻辑。 |
首先,我们创建一个自定义春季网络会议代表Spring Session的会期. 它大致看起来如下:
public class SpringSessionWebSession implements WebSession {
enum State {
NEW, STARTED
}
private final S session;
private AtomicReference<State> state = new AtomicReference<>();
SpringSessionWebSession(S session, State state) {
this.session = session;
this.state.set(state);
}
@Override
public void start() {
this.state.compareAndSet(State.NEW, State.STARTED);
}
@Override
public boolean isStarted() {
State value = this.state.get();
return (State.STARTED.equals(value)
|| (State.NEW.equals(value) && !this.session.getAttributes().isEmpty()));
}
@Override
public Mono<Void> changeSessionId() {
return Mono.defer(() -> {
this.session.changeSessionId();
return save();
});
}
// ... other methods delegate to the original Session
}
接下来,我们创建一个自定义网络会话商店这会委托给ReactiveSessionRepository以及环球会期进入习俗网络会话实现情况,如下列表所示:
public class SpringSessionWebSessionStore<S extends Session> implements WebSessionStore {
private final ReactiveSessionRepository<S> sessions;
public SpringSessionWebSessionStore(ReactiveSessionRepository<S> reactiveSessionRepository) {
this.sessions = reactiveSessionRepository;
}
// ...
}
Spring WebFlux 将检测到这一习俗网络会话商店需要注册应用上下文作为一个名为webSessionManager.
有关 Spring WebFlux 的更多信息,请参见 Spring Framework 参考文档。