Spring Session -- WebSocket Integration WebSocket 集成

官网:https://spring.io/projects/spring-session

Samples:https://docs.spring.io/spring-session/reference/samples.html#samples

指引

  1. Spring Session – HttpSession Integration HttpSession集成
  2. Spring Session – WebSocket Integration WebSocket 集成
  3. Spring Session – WebSession Integration WebSession 集成
  4. Spring Session – Spring Security Integration Spring Security 集成

WebSocket Integration WebSocket 集成

Spring Session 提供了与 Spring 的 WebSocket 支持的透明集成。提供 HttpSession,因为根据 JSR-356,如果 HttpSession 超时,任何使用 HttpSession 创建的 WebSocket 和经过身份验证的用户都应该被强制关闭

WebSocket 使用

HttpSession 集成

在使用 WebSocket 集成之前,应该首先确保 HttpSession 集成工作

Spring 配置

在典型的Spring WebSocket应用程序中,将实现WebSocketMessageBrokerConfigurer

@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		registry.addEndpoint("/messages").withSockJS();
	}

	@Override
	public void configureMessageBroker(MessageBrokerRegistry registry) {
		registry.enableSimpleBroker("/queue/", "/topic/");
		registry.setApplicationDestinationPrefixes("/app");
	}

}

可更新配置来使用 Spring Session 的 WebSocket 支持

@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractSessionWebSocketMessageBrokerConfigurer<Session> {

	@Override
	protected void configureStompEndpoints(StompEndpointRegistry registry) {
		registry.addEndpoint("/messages").withSockJS();
	}

	@Override
	public void configureMessageBroker(MessageBrokerRegistry registry) {
		registry.enableSimpleBroker("/queue/", "/topic/");
		registry.setApplicationDestinationPrefixes("/app");
	}

}
  1. 继承 AbstractSessionWebSocketMessageBrokerConfigurer 不是实现 WebSocketMessageBrokerConfigurer
  2. 将 registerStompEndpoints 方法重命名为 configureStompEndpoints 方法

AbstractSessionWebSocketMessageBrokerConfigurer 工作原理

AbstractSessionWebSocketMessageBrokerConfigurer 工作原理

  • WebSocketConnectHandlerDecoratorFactory 实现 WebSocketHandlerDecoratorFactory 接口,被添加到 WebSocketTransportRegistration。确保触发一个包含 WebSocketSession 的自定义 SessionConnectEvent(WebSocketSession 是结束任何仍然开启的 WebSocket 连接所必需的)
  • SessionRepositoryMessageInterceptor 实现 HandshakeInterceptor 接口,被添加到每个 StompWebSocketEndpointRegistration。确保会话被添加到 WebSocket 属性中,以更新最后访问时间
  • SessionRepositoryMessageInterceptor 实现 ChannelInterceptor 接口,被添加到入站 ChannelRegistration。确保每次接收到入站消息时,都会更新Spring会话的最后访问时间
  • WebSocketRegistryListener 实现 ApplicationListener 接口,监听会话事件。确保了获取所有 WebSocketSession 的 SessionId 到相应 WebSocket 连接的映射。通过维护这个映射,可在一个 Spring 会话(HttpSession)结束时关闭所有的 WebSocket 连接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值