我有Seam会话范围的组件CustomIdentity,它覆盖了标准的Seam Identity(也是会话范围的)。扩展的CustomIdentity具有属性
@Out(required=false, scope=ScopeType.SESSION)private User user
在overriden login()中,我定义了一个User对象,填充了来自HttpServletRequest的Principal的信息。在应用程序的第一个请求中,User对象在SESSION范围中按预期排出。但是在第二个请求中,User对象已从Session中消失,当我访问一个Injects它的页面时,我得到一个例外。
我的问题是什么时候组件被完全抛出:
user
的引用)?关于required
属性:
null
,那么已经被注销的用户是否会从会话范围中删除?干杯!
答案 0 :(得分:3)
对于您的第一个问题:在CustomIdentity
的每个方法之后,组件被排除。看一下相应的Seam源代码org.jboss.seam.core.BijectionInterceptor
(Seam 2.2.0)。双射发生在组件,即类,级别。
关于第二个问题:每次CustomIdentity
的请求结束时,您的字段值都会被删除。如果您使用注销属性require=false
,则会话上下文中当前被注销的user
可能会被null
覆盖。