ltkj-admin/src/main/java/com/ltkj/web/websocket/ClientSessionInfo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ltkj-admin/src/main/java/com/ltkj/web/websocket/MyWebSocketConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSocketClientInfo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ltkj-admin/src/main/java/com/ltkj/web/websocket/ClientSessionInfo.java
New file @@ -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; } ltkj-admin/src/main/java/com/ltkj/web/websocket/MyWebSocketConfig.java
New file @@ -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("*"); // 允许跨域 } } ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java
New file @@ -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); } } ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSocketClientInfo.java
New file @@ -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; } 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() 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" }); } }