93 lines
2.7 KiB
Java
Raw Normal View History

2025-11-27 19:07:55 +08:00
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 {
2026-01-25 14:07:39 +08:00
// 核心字段:用户唯一标识(仍保持final,不建议修改)
2025-11-27 19:07:55 +08:00
private final String userId;
2026-01-25 14:07:39 +08:00
// 身份属性(移除final修饰符,支持修改)
private String username; // 用户名
private String role; // 角色(如ADMIN/USER)
private String loginIp; // 登录IP
2025-11-27 19:07:55 +08:00
// 连接元数据
private final Session session; // WebSocket连接会话
private final LocalDateTime connectTime; // 连接建立时间
// 动态属性(支持运行时更新,线程安全)
private final Map<String, Object> 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;
}
2026-01-25 14:07:39 +08:00
// ========== 可修改属性(getter + setter) ==========
2025-11-27 19:07:55 +08:00
public String getUsername() {
return username;
}
2026-01-25 14:07:39 +08:00
// 添加username的setter方法
public void setUsername(String username) {
this.username = username;
}
2025-11-27 19:07:55 +08:00
public String getRole() {
return role;
}
2026-01-25 14:07:39 +08:00
// 添加role的setter方法
public void setRole(String role) {
this.role = role;
}
2025-11-27 19:07:55 +08:00
public String getLoginIp() {
return loginIp;
}
2026-01-25 14:07:39 +08:00
// 添加loginIp的setter方法
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
2025-11-27 19:07:55 +08:00
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();
}
}