如何检查用户何时通过会话过期退出
问题描述:
我在glassfish上使用j_security_check验证jdbcRealm上的Glassfish连接到MSSQL数据库。 有没有什么办法来检查是否存在给定用户名的活动bean? 我只想显示在线上的网页上。我的猜测:如何检查用户何时通过会话过期退出
- 保持变量数据库,并登录/注销改变它。如果有人没有注销,但他的会话过期,问题就会发生。比我没有可能检查他是否仍然登录。
- 在bean中保留布尔变量,并使用登录/注销对其进行更改。问题与以前的机会一样。
会话过期时是否有方法更改此类变量?也许其他一些方法更常见?
答
如果有人没有注销,但他的会话过期,问题就出现了。 。比起我没有
可能性,以检查他是否在仍处于登录你必须通过实施的可能性HttpSessionListener
:
@WebListener
public class YourUserSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
// NOOP.
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
YourUser yourUser = event.getSession().getAttribute("yourUser");
if (yourUser != null) {
yourUser.logout(); // Update DB.
}
}
}
哪里YourUser
是你的会话范围JSF管理的bean代表登录在用户。
或者,当你在JSF2(你的问题的历史证明),把@PreDestroy
在会话中注销方法范围的JSF管理的bean代表登录的用户:
@ManagedBean
@SessionScoped
public class YourUser {
// ...
@PreDestroy
public void logout() {
// Update DB.
}
}
这样的方法将在bean在会话到期之前被销毁之前调用。
为什么不在成员数据库中为联机创建布尔字段,并且当他们的会话过期时将其设置为false? – 2011-12-19 20:37:04
这是我一直在考虑的事情,但我不知道如何检查某人会话是否已过期,或者如何将变量变量平行地更改为过期。 – xwhyz 2011-12-19 20:45:44