在我的应用程序中,我希望在登录时在会话中存储有关用户的一些数据。它将从数据库中检索并通过调用flexSession.setAttribute('age',n)放置在FlexSession中。我在JDBC领域使用 Tomcat 。问题是,当用户使用他的登录名和密码进行身份验证时,如何在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的位置,使用用户名和密码并设置其他一些属性。
或者我可以通过添加
来使用FlexSessionListenerFlexSession.addSessionCreatedListener(new CustomFlexSessionListener());
但到了哪里?
期待您的想法。感谢。
答案 0 :(得分:0)
此处的解决方案:http://oncer-l.iteye.com/blog/1897972。 需要在services-config文件中创建并指定新的Bootstrap服务:
<service id="listener" class="test.ListenersBootstrapService" />
它将在servlet启动时执行,因此我们在其中添加:
@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上监听属性更改事件的方法。