前言:
此刻我们对“js中获取session”大体比较珍视,小伙伴们都需要剖析一些“js中获取session”的相关文章。那么小编同时在网摘上汇集了一些有关“js中获取session””的相关知识,希望大家能喜欢,同学们一起来学习一下吧!在使用springboot的websocket功能stomp时,不能直接获取websocketsession,下面提供一个方法。
stomp配置可参考之前文章:配置websocket
添加WebSocketHandler
public class CustomSubProtocolWebSocketHandler extends SubProtocolWebSocketHandler { private static final Logger LOGGER = LoggerFactory.getLogger(CustomSubProtocolWebSocketHandler.class);// @Autowired private SessionHandler sessionHandler; public CustomSubProtocolWebSocketHandler(MessageChannel clientInboundChannel, SubscribableChannel clientOutboundChannel) { super(clientInboundChannel, clientOutboundChannel); } public CustomSubProtocolWebSocketHandler(MessageChannel clientInboundChannel, SubscribableChannel clientOutboundChannel, SessionHandler sessionHandler) { super(clientInboundChannel, clientOutboundChannel); this.sessionHandler = sessionHandler; } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { LOGGER.info("New websocket connection was established"); sessionHandler.register(session); super.afterConnectionEstablished(session); }}
其中afterConnectionEstablished,负责能够在建立websocket连接时获取session,这里的sessionHandler就是对这个session的处理了。
将CustomSubProtocolWebSocketHandler配置一下就可以了
@EnableWebSocketMessageBrokerpublic class WebSocketStompConfig /*extends AbstractWebSocketMessageBrokerConfigurer*/ extends WebSocketMessageBrokerConfigurationSupport implements WebSocketMessageBrokerConfigurer { @Autowired private AbstractAuthService authService; @Autowired private SessionHandler sessionHandler; /** * 注册stomp的端点 */ @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // 允许使用socketJs方式访问,访问点为webSocketServer,允许跨域 // 在网页上我们就可以通过这个链接 // // 来和服务器的WebSocket连接 registry.addEndpoint("/webSocketServer")// .addInterceptors(new SessionAuthHandshakeInterceptor()) .setAllowedOrigins("*") .withSockJS(); } /** * 配置信息代理 */ @Override public void configureMessageBroker(MessageBrokerRegistry registry) { // 订阅Broker名称 registry.enableSimpleBroker("/queue", "/topic"); // 全局使用的消息前缀(客户端订阅路径上会体现出来) registry.setApplicationDestinationPrefixes("/app"); // 点对点使用的订阅前缀(客户端订阅路径上会体现出来),不设置的话,默认也是/user/ registry.setUserDestinationPrefix("/user/"); } /** * 配置客户端入站通道拦截器 */ @Override public void configureClientInboundChannel(ChannelRegistration registration) { registration.interceptors(createUserInterceptor()); } @Override public void configureClientOutboundChannel(ChannelRegistration registration) { super.configureClientOutboundChannel(registration); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { super.addArgumentResolvers(argumentResolvers); } @Override public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) { super.addReturnValueHandlers(returnValueHandlers); } @Override public boolean configureMessageConverters(List<MessageConverter> messageConverters) { return super.configureMessageConverters(messageConverters); } /*将客户端渠道拦截器加入spring ioc容器*/ @Bean public UserInterceptor createUserInterceptor() { UserInterceptor userInterceptor = new UserInterceptor(); userInterceptor.setAuthService(authService); return userInterceptor; } @Override public void configureWebSocketTransport(WebSocketTransportRegistration registration) { registration.setMessageSizeLimit(500 * 1024 * 1024); registration.setSendBufferSizeLimit(1024 * 1024 * 1024); registration.setSendTimeLimit(200000); } @Override @Bean public WebSocketHandler subProtocolWebSocketHandler() { return new CustomSubProtocolWebSocketHandler(clientInboundChannel(), clientOutboundChannel(), sessionHandler); }}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #js中获取session