103 lines
2.9 KiB
Java
103 lines
2.9 KiB
Java
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 webId;
|
||
private String username; // 用户名
|
||
private String role; // 角色(如ADMIN/USER)
|
||
private String loginIp; // 登录IP
|
||
// 连接元数据
|
||
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;
|
||
}
|
||
|
||
// ========== 可修改属性(getter + setter) ==========
|
||
public String getUsername() {
|
||
return username;
|
||
}
|
||
|
||
// 添加username的setter方法
|
||
public void setUsername(String username) {
|
||
this.username = username;
|
||
}
|
||
// ========== 可修改属性(getter + setter) ==========
|
||
public String getWebId() {
|
||
return webId;
|
||
}
|
||
|
||
// 添加username的setter方法
|
||
public void setWebId(String webId) {
|
||
this.webId = webId;
|
||
}
|
||
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();
|
||
}
|
||
|
||
} |