gpt4 book ai didi

xpages - session 范围的托管 bean 在 xpages 应用程序中似乎不是 session 范围的

转载 作者:行者123 更新时间:2023-12-02 00:58:08 25 4
gpt4 key购买 nike

我编写了一个 session 范围的托管 bean 来在 domino xpages 应用程序中缓存 session 用户特定信息,就像下面的代码一样:

    public class NBUserInfo {
private String fullUserName;
private String commonUserName;
private String displayName;
private String mailAddress;
private String themeType;
private String themeData;

private Session _session;
private Database _dbnames;
private Name _dominoName;

public NBUserInfo(){
System.out.println("初始化Managed Bean:NBUserInfo...");
_session = ExtLibUtil.getCurrentSession();

try {
System.out.println(_session.getEffectiveUserName());
_dbnames = _session.getDatabase(_session.getCurrentDatabase().getServer(), "names.nsf",false);
_dominoName = _session.createName(_session.getEffectiveUserName());
} catch (NotesException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

}

public String getFullUserName() {
if(fullUserName==null)
try {
fullUserName = _dominoName.getCanonical();
} catch (NotesException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return fullUserName;
}

然后,我在 faces-config 中声明它以使其成为 session 范围的 bean:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
<!--注册受管Beans-->
<managed-bean>
<managed-bean-name>NBUser</managed-bean-name>
<managed-bean-class>com.nbhdtech.common.NBUserInfo</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<!--注册自定义XPAGES根渲染器-->
<render-kit>
<renderer>
<component-family>javax.faces.ViewRoot</component-family>
<renderer-type>com.ibm.xsp.ViewRootEx</renderer-type>
<renderer-class>com.nbhdtech.xsp.CustomViewRootRenderer</renderer-class>
</renderer>
</render-kit>
<!--AUTOGEN-START-BUILDER:由 IBM Domino Designer 自动生成。请勿修改。-->
<!--AUTOGEN-END-BUILDER:自动生成的区段的末尾-->
</faces-config>

测试bean时,我通过#{NBUser.fullUserName}使用了它,它并不总是返回当前 domino http session 上下文的用户,例如,我首先由用户“user1”登录并注销,然后由 user2 登录,bean 似乎没有为新的 user2 session 重新创建,仍然是 user1 的 session 信息。

有什么解决办法吗?我的多米诺骨牌已配置为 LTPAToken SSO 配置。如果有任何答案,非常感谢

最佳答案

正如 Mark Leusink 所提到的,XPages 中的 sessionScope 链接到浏览器 session 而不是(登录的)用户 session 。

因此您需要一种方法来检查当前用户是否与绑定(bind)到您的用户 bean 的用户相匹配。一种方法是在每次请求时调用用户 bean 中的“验证”方法。 “验证”方法可能如下所示:

public void verify() {
// retrieve the username of the current user
String currentUser = ExtLibUtil.getCurrentSession().getEffectiveUserName();

// (re-)init the user bean if another user logged in
if (!currentUser.equals(getFullUserName())) {
// Call your constructor logic here
}
}

您可以在您的中央自定义控件之一(例如布局的自定义控件)的 beforePageLoad 事件中调用此“验证”方法:

<xp:this.beforePageLoad><![CDATA[#{javascript:
// (re-)init the userbean if another user logged in
NBUser.verify();
}]]></xp:this.beforePageLoad>

--

此外,您不应该将 Domino 特定对象存储在 bean 中。

关于xpages - session 范围的托管 bean 在 xpages 应用程序中似乎不是 session 范围的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52688863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com