當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Web Socket/Stomp——整合Spring Session【Header Token模式】解决方案
生活随笔
收集整理的這篇文章主要介紹了
Web Socket/Stomp——整合Spring Session【Header Token模式】解决方案
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
官方文檔
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#websocket-stomp-authentication-token-based?
解決方案
方法一:
參考:org.springframework.session.web.socket.server.SessionRepositoryMessageInterceptor、org.springframework.session.web.socket.config.annotation.AbstractSessionWebSocketMessageBrokerConfigurer
/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-04-12 13:10*/ @Configuration @EnableWebSocket @EnableWebSocketMessageBroker @Order(Ordered.HIGHEST_PRECEDENCE + 99) public class CustomWebSocketConfig<S extends Session> implements WebSocketMessageBrokerConfigurer {private final SessionRepository<S> sessionRepository;public CustomWebSocketConfig(SessionRepository<S> sessionRepository) {Assert.notNull(sessionRepository, "sessionRepository cannot be null");this.sessionRepository = sessionRepository;}@Overridepublic void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {stompEndpointRegistry.addEndpoint("/ws/endpointChat").setAllowedOrigins("*").withSockJS();}@Overridepublic void configureClientInboundChannel(ChannelRegistration registration) {registration.interceptors(new ChannelInterceptor() {@Overridepublic Message<?> preSend(Message<?> message, MessageChannel channel) {StompHeaderAccessor accessor =MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);assert accessor != null;String sessionId = accessor.getFirstNativeHeader("X-Auth-Token");if (sessionId != null) {S session = sessionRepository.findById(sessionId);if(session != null){// update the last accessed timesession.setLastAccessedTime(Instant.now());sessionRepository.save(session);if (StompCommand.CONNECT.equals(accessor.getCommand())) {SecurityContext context = session.getAttribute(WebConstants.SPRING_SECURITY_CONTEXT);Authentication user = context.getAuthentication() ; // access authentication header(s)accessor.setUser(user);}}}return message;}});}@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {registry.enableSimpleBroker("/queue", "/topic");}}方法二:
Springboot http session支持分布式;同時支持 cookie 和 header 傳遞;websocket 連接 共享 http session?
參考文章
Springboot http session支持分布式;同時支持 cookie 和 header 傳遞;websocket 連接 共享 http session?
Spring Websocket/STOMP 和SpringSession整合 初步
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Web Socket/Stomp——整合Spring Session【Header Token模式】解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Security——基于读
- 下一篇: 《数据库系统实训》实验报告——系统安装与