From 74ea6779bd941167afcd8c120dc2ac68f886aa67 Mon Sep 17 00:00:00 2001 From: zhaowenxuan <chacca165@163.com> Date: 星期五, 27 六月 2025 20:24:30 +0800 Subject: [PATCH] websocket --- ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java | 2 ltkj-admin/src/main/java/com/ltkj/web/websocket/ClientSessionInfo.java | 12 ++++ ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSocketClientInfo.java | 14 ++++ ltkj-admin/src/main/java/com/ltkj/web/websocket/MyWebSocketConfig.java | 25 ++++++++ ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java | 66 ++++++++++++++++++++++ ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java | 3 6 files changed, 120 insertions(+), 2 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/websocket/ClientSessionInfo.java b/ltkj-admin/src/main/java/com/ltkj/web/websocket/ClientSessionInfo.java new file mode 100644 index 0000000..248734b --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/websocket/ClientSessionInfo.java @@ -0,0 +1,12 @@ +package com.ltkj.web.websocket; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.springframework.web.socket.WebSocketSession; + +@Data +@AllArgsConstructor +public class ClientSessionInfo { + private WebSocketSession session; + private String code; +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/websocket/MyWebSocketConfig.java b/ltkj-admin/src/main/java/com/ltkj/web/websocket/MyWebSocketConfig.java new file mode 100644 index 0000000..1532224 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/websocket/MyWebSocketConfig.java @@ -0,0 +1,25 @@ +package com.ltkj.web.websocket; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; + +/** + * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃 + * @Author: zhaowenxuan + * @Date: 2025/6/27 15:47 + */ +@Configuration +@EnableWebSocket +public class MyWebSocketConfig implements WebSocketConfigurer { + @Autowired + private WebSockerManager webSockerManager; + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(webSockerManager, "/ws") +// .addInterceptors(tokenHandshakeInterceptor) + .setAllowedOrigins("*"); // 鍏佽璺ㄥ煙 + } +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java b/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java new file mode 100644 index 0000000..e1efb33 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java @@ -0,0 +1,66 @@ +package com.ltkj.web.websocket; + +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; +import redis.clients.jedis.util.SafeEncoder; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃 + * @Author: zhaowenxuan + * @Date: 2025/6/27 14:59 + */ +@Slf4j +@Component +public class WebSockerManager extends TextWebSocketHandler { + + private static final ConcurrentHashMap<Long, ClientSessionInfo> userSessions = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap<String, WebSocketClientInfo> sessions = new ConcurrentHashMap<>(); + + private WebSocketClientInfo getUser(WebSocketSession session) { +// long uid = Long.parseLong(session.getAttributes().get("uid").toString()); +// String hospId = session.getAttributes().get("hospId").toString(); +// WebSocketClientInfo info = new WebSocketClientInfo(); +// info.setUid(uid); +// info.setHospId(hospId); +// return info; + WebSocketClientInfo clientInfo = new WebSocketClientInfo(); + clientInfo.setUid(123L); + clientInfo.setHospId("hosp"); + return clientInfo; + } + + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + WebSocketClientInfo clientInfo = getUser(session); +// userSessions.put(clientInfo.getUid(), new ClientSessionInfo(session, clientInfo.getHospId())); + sessions.put(session.getId(),clientInfo); + log.info(JSONUtil.toJsonStr(sessions)); + session.sendMessage(new TextMessage("杩炴帴鎴愬姛")); + } + + @Override + protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { + String payload = message.getPayload(); + // 澶勭悊 ping/pong + if ("ping".equals(payload)) { + session.sendMessage(new TextMessage("pong")); + return; + } + String sessionId = session.getId(); + WebSocketClientInfo clientInfo = sessions.get(sessionId); + log.info("[WebSocket] 鏀跺埌瀹㈡埛绔秷鎭� userId:{} msg: {}",clientInfo.getUid(),payload); + session.sendMessage(new TextMessage("[WebSocket] 鏀跺埌瀹㈡埛绔秷鎭� msg: " + payload)); + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { + log.info("[WebSocket] 杩炴帴鍏抽棴: " + status); + } +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSocketClientInfo.java b/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSocketClientInfo.java new file mode 100644 index 0000000..42d24f4 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSocketClientInfo.java @@ -0,0 +1,14 @@ +package com.ltkj.web.websocket; + +import lombok.Data; + +/** + * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃 + * @Author: zhaowenxuan + * @Date: 2025/6/27 15:33 + */ +@Data +public class WebSocketClientInfo { + private String hospId; + private Long uid; +} diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java b/ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java index 31bca15..7124c09 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java @@ -118,7 +118,7 @@ .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() .antMatchers("/api/**").permitAll() - .antMatchers("/jmreport/**","/lis/**","/pacs/**","/callBack/**","/hosp/order/signOrderInfo").anonymous() + .antMatchers("/jmreport/**","/lis/**","/pacs/**","/callBack/**","/hosp/order/signOrderInfo","/ws").anonymous() // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇� .anyRequest().authenticated() .and() diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java b/ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java index 5061d9b..4a254a9 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java @@ -26,7 +26,8 @@ "/hosp/order/signOrderInfo", "/common/listExeVal", "/profileupload/**", - "/common/getExeUploadImgList" + "/common/getExeUploadImgList", + "/ws" }); } } -- Gitblit v1.8.0