MUO

MUO(Managed-User-Object)被管用户对象,通过它可以扩展定义用户在应用中的会话信息。 

 1、扩展用户会话信息

在一般J2EE应用中,存储一个用户相关会话信息是通过HttpSession设置用户的相关属性。 对应着在EOS6也提供了相应的上下文作用域存储用户信息,即SessionContext的IUserObject。 默认userObject已提供一些常用的属性,可以在用户登录后,对这些属性进行初始化赋值。 但通常一个系统的用户信息不止只有这些,那么就需要进行扩展定义,有以下两种方式:   

①     通过userObject提供的扩展属性attributes进行设置。Attributes是一个Map的属性对象,可以对其任意设置值。如: userObject.getAttributes().put(“empid”,empid); 
 对应在页面流的赋值操作:s:userObject/attributes/empid   

②     通过user-config.xml定义MUO相关扩展属性。如:

 <module name="Session-Manage"> 

 <group name="Managed-User-Object"> 

<configValue key=”empid”>sdo:Int</configValue>         </group> </module>

2、优劣比较 
那么这2种方式到底有什么区别,他们分别在什么情况下使用? 
它们本质上都是通过HttpSession保存数据。从J2EE分层原则上看,它们都是应该在Web层(或者说是展现层,页面流)的操作,而不应该属于业务逻辑层(逻辑流)。 
  第①种定义的好处就是,你只能在页面流通过“s:”的方式获取会话中的数据,从而有效的隔离了逻辑流跨“层”的操作,而逻辑流想获取会话中的值必需以参数形式传递。 
不便之处就是,在Studio没办法提示attributes有哪些属性可操作。 
   第②种定义的好处就是,你可以在逻辑流中通过“m:”的方式获取会话中的数据,而省了参数定义。但EOS6之所以允许这么处理,是因为从页面流调用逻辑流时,会将会话中的数据“拷贝”到MUO Context中,处理完后再将数据“拷贝”回会话。  但从设计的原则上来说,一个操作业务的接口应该是清晰的,需要避免隐晦的参数来源;第二:采用“m:”方式在页面流和逻辑流分开部署的结构上,不易扩展,可能会带来性能上的损失;第三:在逻辑流采用“m:”获取MUO或Session上下文的内容时,当把逻辑流暴露为对外调用的服务时,要注意参数的正确性,因为“m:”获取的参数值为本应用的会话数据。        
注意:在MUO或userObject/attributes定义的扩展属性值,必需是可序列化的对象!尽量简洁!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值