Управляемый компонент в области сеанса, по-видимому, не является областью действия в приложении xpages - PullRequest
0 голосов
/ 07 октября 2018

Я написал управляемый bean-объект сессионной области для кэширования специфической информации о пользователях sesion в приложении domino xpages, как и следующие коды:

    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;
    }

затем я объявил это в face-configчтобы сделать его сессионным 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}, он не всегда возвращает пользователя из текущего сеансового контекста http домино, например, Я вошел в систему сначала пользователем "user1" и вышел из системы, затем вошел в систему как user2, бин, кажется, не воссоздан для нового сеанса user2, просто все еще информация о сеансе user1.

есть ли обходной путьоб этом?мое домино было настроено на LTPAToken SSO config.Большое спасибо, если есть какие-либо ответы об этом

1 Ответ

0 голосов
/ 09 октября 2018

Как отмечает Марк Леусинк, sessionScope в XPages связан с сеансом браузера, а не с (вошедшим в систему) сеансом пользователя.

Поэтому вам нужен способ проверить, соответствует ли текущий пользователь пользователю, привязанному к вашемупользовательский бин.Одним из способов сделать это является вызов метода «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 одного из ваших центральных пользовательских элементов управления (например, пользовательского элемента управления для вашего макета).:

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

-

Кроме того, вы не должны хранить специфичные для Domino объекты в бине.

...