2026-03-17 17:44:11 +08:00

103 lines
2.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}