Как установить атрибут 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.