package com.czlis.interfaceCommon.websocket; import javax.websocket.Session; import java.time.LocalDateTime; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 封装WebSocket用户连接信息:聚合Session + 身份属性 + 连接元数据 */ public class WebSocketUser { // 核心字段:用户唯一标识(仍保持final,不建议修改) private final String userId; // 身份属性(移除final修饰符,支持修改) private String username; // 用户名 private String role; // 角色(如ADMIN/USER) private String loginIp; // 登录IP // 连接元数据 private final Session session; // WebSocket连接会话 private final LocalDateTime connectTime; // 连接建立时间 // 动态属性(支持运行时更新,线程安全) private final Map dynamicAttrs; // 自定义动态属性 // 构造器:初始化核心属性(必填) public WebSocketUser(String userId, String username, String role, String loginIp, Session session) { this.userId = userId; this.username = username; this.role = role; this.loginIp = loginIp; this.session = session; this.connectTime = LocalDateTime.now(); this.dynamicAttrs = new ConcurrentHashMap<>(); // 动态属性用线程安全Map } // ========== 只读属性(getter) ========== public String getUserId() { return userId; } // ========== 可修改属性(getter + setter) ========== public String getUsername() { return username; } // 添加username的setter方法 public void setUsername(String username) { this.username = username; } public String getRole() { return role; } // 添加role的setter方法 public void setRole(String role) { this.role = role; } public String getLoginIp() { return loginIp; } // 添加loginIp的setter方法 public void setLoginIp(String loginIp) { this.loginIp = loginIp; } public Session getSession() { return session; } public LocalDateTime getConnectTime() { return connectTime; } // ========== 动态属性(支持增删改查,线程安全) ========== public void setDynamicAttr(String key, Object value) { dynamicAttrs.put(key, value); } public Object getDynamicAttr(String key) { return dynamicAttrs.get(key); } public void removeDynamicAttr(String key) { dynamicAttrs.remove(key); } // 检查连接是否有效 public boolean isConnected() { return session != null && session.isOpen(); } }