# 如何在EOS会话数据中扩展自定义数据

会话期间,可以自定义扩展自定义数据,具体步骤如下:

# 1.取出用户对象:

public static UserObject getCurrentUser() {
        try {
            UserObject user = (UserObject)DataContextManager.current().getMUODataContext().getUserObject();
            if (user != null) {
                return user;
            }
        } catch (Throwable t) {}
        throw NOT_LOGIN.runtimeException();
    }

# 2.扩展自定义数据

  • IUserObject是一个用户对象的接口,继承了一个IOpenable的接口,可以动态地增加或删除属性,类似于一个Map。

  • com.eos.data.datacontext.UserObject 是IUserObject的实现类,用户登录之后需要由应用开发人员创建UserObject实例并调用基础构件库方法com.eos.foundation.eoscommon.OnlineUserManagerUtil.login(IUserObject userObject),EOS会把UserObject放入到HttpSession中,对应的attribute的名字是"userObject"。

用户取到IUserObject后,可以自行往IUserObject中扩展属性。

# 3.刷新缓存

在线用户管理操作类OnlineUserManager实现了对在线用户管理的操作,登录的时候会使用login方法将IUserObject存入缓存,增加属性需要更新缓存中的IUserObject。

  • 调用EOS缓存功能,获取登录用户的缓存,cacheName为"CacheForUserObject"。

# 4. 示例

扩展自定义数据name的值为普元

// 获取缓存,缓存Name为CacheForUserObject
ICache<String, IUserObject> cache = (ICache<String, IUserObject>) CacheFactory.getInstance().findCache("CacheForUserObject");
// 获取IUserObject
IUserObject userObject = DataContextManager.current().getMUODataContext().getUserObject();
// 扩展属性
userObject.put("name", "普元");
// 获取uniqueId,缓存的key
String uniqueId = userObject.getUniqueId();
// 更新缓存
IUserObject user = cache.get(uniqueId);
if(user != null) {
    cache.put(uniqueId, userObject);
}
上次更新: 2023/7/20下午12:25:28