78 lines
2.3 KiB
Java
78 lines
2.3 KiB
Java
|
|
package com.czlis.interfaceCommon.websocket;
|
|||
|
|
|
|||
|
|
import javax.websocket.Session;
|
|||
|
|
import java.net.InetSocketAddress;
|
|||
|
|
import java.time.LocalDateTime;
|
|||
|
|
import java.util.Map;
|
|||
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 封装WebSocket用户连接信息:聚合Session + 身份属性 + 连接元数据
|
|||
|
|
*/
|
|||
|
|
public class WebSocketUser {
|
|||
|
|
// 核心字段:用户唯一标识
|
|||
|
|
private final String userId;
|
|||
|
|
// 身份属性(可根据业务扩展)
|
|||
|
|
private final String username; // 用户名
|
|||
|
|
private final String role; // 角色(如ADMIN/USER)
|
|||
|
|
private final 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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public String getUsername() {
|
|||
|
|
return username;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public String getRole() {
|
|||
|
|
return role;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public String getLoginIp() {
|
|||
|
|
return 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();
|
|||
|
|
}
|
|||
|
|
}
|