欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 若依集成WebSocket

若依集成WebSocket

2025/2/21 3:16:28 来源:https://blog.csdn.net/qq_36022463/article/details/145674456  浏览:    关键词:若依集成WebSocket

导入包:

    <dependency><groupId>io.reactivex.rxjava3</groupId><artifactId>rxjava</artifactId><version>3.1.8</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>
  1. security放开websocket的连接
  2. 设置拦截器,拦截用户信息
@Component
@EnableWebSocketMessageBroker
@Order(Ordered.HIGHEST_PRECEDENCE+99)
public class wsConfig implements WebSocketMessageBrokerConfigurer {@AutowiredISysUserService sysUserService;private static long HEART_BEAT = 10000;@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint("/ws").setAllowedOrigins("*");
//                .setAllowedOriginPatterns("*")//                .withSockJS();}@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {ThreadPoolTaskScheduler te = new ThreadPoolTaskScheduler();te.setPoolSize(1);te.setThreadNamePrefix("wss-heartbeat-thread");te.initialize();registry.enableSimpleBroker("/topic","/queue")
//                .setHeartbeatValue().setHeartbeatValue(new long[]{HEART_BEAT,HEART_BEAT}).setTaskScheduler(te);}@Overridepublic void configureClientInboundChannel(ChannelRegistration registration) {ChannelInterceptor interceptor = new ChannelInterceptor(){@Overridepublic Message<?> preSend(Message<?> message, MessageChannel channel) {StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);if(accessor == null || accessor.getCommand() == null){return null;}if (StompCommand.CONNECT.equals(accessor.getCommand())){// 处理连接的请求String token = accessor.getFirstNativeHeader("Authorization");SysUser user = sysUserService.selectUserById(1L);LoginUser loginUser = new LoginUser();BeanUtils.copyProperties(user,loginUser);UsernamePasswordAuthenticationToken principal = new UsernamePasswordAuthenticationToken(loginUser, null, Collections.EMPTY_LIST);//                    UserContextHolder.set(user);accessor.setUser(principal);}else{// 其他的请求,token只用设置一次
//                    SysUser user = sysUserService.selectUserById(1L);
//                    UserContextHolder.set(user);System.out.println("other请求");Authentication authentication = (Authentication) accessor.getUser();LoginUser loginUser = (LoginUser) authentication.getPrincipal();System.out.println("loginUser111 = " + loginUser);}return message;}};registration.interceptors(interceptor);}
}
  1. 请求获取用户信息
   @MessageMapping("/send")public void sendMessage(Message<?> message, com.cj.project.ws.model.Message messageBody){System.out.println("message = " + message);StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);Principal principal = accessor.getUser();Authentication authentication = (Authentication) principal;Object user = authentication.getPrincipal();System.out.println("user = " + user);System.out.println(user instanceof LoginUser);if (user instanceof LoginUser){LoginUser loginUser = (LoginUser) user;System.out.println("loginUser = " + loginUser);}Object payload = message.getPayload();System.out.println("payload = " + payload);System.out.println("payload = " + new String((byte[]) payload));System.out.println("messageBody = " + messageBody);String messageBodyTo = messageBody.getTo();System.out.println("messageBodyTo = " + messageBodyTo);this.pushMessage();}

在这里插入图片描述
心跳推送,send到/heartbeat

引用:https://juejin.cn/post/7345310754470821922
引用:https://blog.csdn.net/print_helloword/article/details/142816204
https://blog.csdn.net/2301_80817413/article/details/139561814
https://blog.csdn.net/qq_45032714/article/details/112261976

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词