我使用j_security_check验证在glassfish上使用JSF Web应用程序,并在连接到MSSQL db的glassfish上使用jdbcRealm。 有没有办法检查例如是否存在具有给定用户名的活动bean? 我只想在网页上显示谁在线。我的猜测:
会话到期时有没有办法改变这样的变量?也许其他一些方法更常见?
答案 0 :(得分:2)
如果有人没有注销但会话过期,则会出现问题。比我没有可能检查他是否仍然登录。
您可以实施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中的logout方法上:
@ManagedBean
@SessionScoped
public class YourUser {
// ...
@PreDestroy
public void logout() {
// Update DB.
}
}
这样,在会话到期时bean被销毁之前,将调用该方法。