6.2.5.2. 会话属性
当用户登录时,用户访问组的所有属性集合,以及组以上树形层级的属性集合都会被置于用户会话中。如果不同树形层级有相同的属性,最上层的会生效。所以,不可能在低树形层级组中覆盖属性值。如果发现有覆盖倾向,会在服务器日志中记录一条警告日志。
在定义 访问组 的类中,也可以同时定义约束和会话属性。该类需位于 core
模块。下面是一个访问组的例子,其中定义了 accessLevel
会话属性值为 1
:
@AccessGroup(name = "Level 1", parent = RootGroup.class)
public class FirstLevelGroup extends AnnotatedAccessGroupDefinition {
@SessionAttribute(name = "accessLevel", value = "1", javaClass = Integer.class)
@Override
public Map<String, Serializable> sessionAttributes() {
return super.sessionAttributes();
}
}
会话属性也可以在运行时通过 Access Groups - 访问组 界面定义:选择一个访问组然后切换到其 Session Attributes - 会话属性 标签页。
会话属性可在代码中通过 UserSession
对象访问:
@Inject
private UserSessionSource userSessionSource;
...
Integer accessLevel = userSessionSource.getUserSession().getAttribute("accessLevel");
使用 session$
前缀,会话属性可以在约束中做为 JPQL 参数使用:
{E}.accessLevel = :session$accessLevel