# 如何在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);
}