扩展库UserBean缓存

时间:2014-04-03 06:42:33

标签: caching xpages acl

我正在使用Extension Library Managed Bean“UserBean”。我正在尝试使用userBean测试面板的ACL属性的简单证明。然后我在页面上有三个面板,其中包含文本。这是其中一个小组。

显示我当前的角色。

<xp:text escape="true" id="computedField3" value="#{javascript:return userBean.accessRoles.toString();}"></xp:text>



   <xp:panel id="panelMarketing" style="border:1px solid red;">
    <xp:this.acl>
        <xp:acl>
            <xp:this.loaded><![CDATA[${javascript:var roles = userBean.accessRoles.toString();
return roles.contains("[MARKETING]");}]]></xp:this.loaded>
        </xp:acl>
    </xp:this.acl>
    <xp:label value="I'm in Marketing" id="label2"></xp:label>
</xp:panel>

我加载了页面,而我分配了3个角色。面板显示。删除角色后,所有面板仍会显示,返回用户角色的文本字段仍显示ACL中分配给我的旧角色。像UserBean这样的接缝不会再次读取ACL。

然后我尝试CTRL F5,仍然没有。然后我打开另一个浏览器,登录到应用程序,仍然是相同的角色。关闭浏览器,重新登录,不做任何更改。

是否有刷新时间或强制userBean更新用户ACL角色的方法?

第二天我重新登录,UserBean反映了我的更改。我做了另一个更改,UserBean没有反映更改。

3 个答案:

答案 0 :(得分:0)

对于acl添加一个aclEntry并且不对已加载的属性进行编码,如此...

<xp:panel id="panelMarketing" style="border:1px solid red;">
    <xp:this.acl>
        <xp:acl>
            <xp:this.entries>
                <xp:aclEntry right="READER" type="ROLE">
                    <xp:this.name><![CDATA[[MARKETING]]]></xp:this.name>
                </xp:aclEntry>
            </xp:this.entries>
        </xp:acl>
    </xp:this.acl>
    <xp:label value="I'm in Marketing" id="label8"></xp:label>
</xp:panel>

答案 1 :(得分:0)

通过阅读Extension Library一书(参见第464页)和userBean实现的源代码,似乎userBeans缓存在应用程序范围内,默认缓存大小设置为100(因为您可以使用userBean访问其他详细信息)用户而不仅仅是当前用户。)

userBean与在会话中进行身份验证的用户一起使用。因此userBean基本上是Java中peopleBean.getPerson()的快捷方式。

peopleBean类有一个refreshPerson(id)方法和一个clearcache(id)方法。尝试使用其中一个来强制peopleBean / userBean通过执行peopleBean.refreshPerson(@UserName())peopleBean.clearcache(@UserName())来刷新。

答案 2 :(得分:0)

我知道这是2年前,但我遇到了同样的问题,并决定进一步调查。

事实证明,底层clearCache(String id)方法中有几个错误,它应该清除单个缓存条目(例如一个人)。因此,在应用程序,会话或请求范围缓存上使用时无效。 (它确实适用于全局缓存,所以我怀疑这是他们测试的唯一一个)。

我已经向扩展库提交了pull request来修复clearCache(字符串ID)方法,所以希望它能够被下一个版本接受!

清除所有条目的clearCache()方法 工作,所以你总是可以尝试

peopleBean.clearCache();

这应该有用(它对我有用)然而它清除了每个人不应该是一个大问题,他们只会再加载我猜。