Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
会话作用域的托管bean在xpages应用程序中似乎不是会话作用域_Xpages_Managed Bean - Fatal编程技术网

会话作用域的托管bean在xpages应用程序中似乎不是会话作用域

会话作用域的托管bean在xpages应用程序中似乎不是会话作用域,xpages,managed-bean,Xpages,Managed Bean,我编写了一个会话范围的托管bean,用于在domino xpages应用程序中缓存sesion用户特定的信息,如下代码所示: public class NBUserInfo { private String fullUserName; private String commonUserName; private String displayName; private String mailAddress; private String themeT

我编写了一个会话范围的托管bean,用于在domino xpages应用程序中缓存sesion用户特定的信息,如下代码所示:

    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配置中声明了它,使其成为会话范围的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>

NBUser
com.nbhdtech.common.NBUserInfo
一场
javax.faces.ViewRoot
com.ibm.xsp.ViewRootEx
com.nbhdtech.xsp.CustomViewRootRenderer
在测试bean时,我通过#{NBUser.fullUserName}使用它, 它并不总是返回当前domino http会话上下文的用户,例如,我首先由用户“user1”登录,然后注销,然后由user2登录,bean似乎没有为新的user2会话重新创建,只是仍然是user1的会话信息


这方面有什么办法吗?我的domino已配置为LTPAToken SSO配置。非常感谢,如果有任何关于它的答案

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

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

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
事件中调用此“verify”方法:


--


另外,您不应该在bean中存储特定于Domino的对象。

XPages中的sessionScope链接到浏览器会话,而不是(登录的)用户会话。因此,如果您注销,保持浏览器打开并再次登录,会话范围将保持不变。更多信息请点击此处:
<xp:this.beforePageLoad><![CDATA[#{javascript:
    // (re-)init the userbean if another user logged in
    NBUser.verify();
}]]></xp:this.beforePageLoad>