zhaowenxuan
2025-06-27 74ea6779bd941167afcd8c120dc2ac68f886aa67
websocket
2个文件已修改
4个文件已添加
122 ■■■■■ 已修改文件
ltkj-admin/src/main/java/com/ltkj/web/websocket/ClientSessionInfo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/websocket/MyWebSocketConfig.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSocketClientInfo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java 3 ●●●● 补丁 | 查看 | 原始文档 | 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"
                });
    }
}