Как установить атрибут FlexSession при входе пользователя в BlazeDS?

В моем приложении я хочу сохранить некоторые данные о пользователе в его сеансе, когда он входит в систему. Он будет извлечен из базы данных и помещен в FlexSession путем вызова flexSession.setAttribute('age', n). Я использую Tomcat с областью JDBC. Вопрос в том, как я могу поместить некоторые данные во FlexSession, когда пользователь аутентифицируется с помощью своего логина и пароля?

Я знаю, что есть flex.messaging.security.LoginManager.java с

 if (username != null && credentials != null)
            {
                Principal authenticated = loginCommand.doAuthentication(username, credentials);

                if (authenticated == null) // Invalid login.
                {
                    SecurityException se = new SecurityException();
                    se.setMessage(INVALID_LOGIN);
                    se.setCode(SecurityException.CLIENT_AUTHENTICATION_CODE);
                    throw se;
                }
                setCurrentPrincipal(authenticated);
            }

но я не уверен, что смогу легко переопределить его (экземпляр реализован в реализации MessageBroker). Поэтому мне просто нужно найти место создания FlexSession с именем пользователя и паролем и установить какой-либо другой атрибут.

Или я могу использовать FlexSessionListener, добавив

FlexSession.addSessionCreatedListener(new CustomFlexSessionListener());

а куда?

Ждем ваших идей. Благодарю.

1 ответ

Решение здесь: http://oncer-l.iteye.com/blog/1897972. Новая служба Bootstrap должна быть создана и указана в файле services-config:

<service id="listener" class="test.ListenersBootstrapService" />     

Он будет выполнен при запуске сервлета, поэтому в него мы добавим:

@Override
public void initialize(String arg0, ConfigMap arg1) {
    // TODO Auto-generated method stub
    System.out.println("hello from init bootstrap listener!");

    MyFlexSessionListener sessionListener = new MyFlexSessionListener(); 
    FlexSession.addSessionCreatedListener(sessionListener); 

}

где

class MyFlexSessionListener implements FlexSessionListener { 

    public void sessionCreated(FlexSession session) 
    { 
        System.out.println("FlexSession created: " + session.getId()); 
        session.setAttribute("gender", "male");     
    } 
} 

Большое спасибо автору статьи.

Проблема, однако, в том, что FlexContext.getUserPrincipal() или session.getUserPrincipal() возвращают значение null, возможно, потому что сначала создается сеанс, а затем проходит проверку подлинности. Необходимо найти способ прослушивания события изменения свойства на userPrincipal.

Другие вопросы по тегам