2025-11-27 19:07:55 +08:00

78 lines
2.3 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.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();
}
}