我正在将JSF 1.2与Richfaces和Facelets结合使用。
我有一个包含许多会话范围的bean和一些应用程序bean的应用程序。
假设用户使用Firefox登录。使用ID =“ A”创建会话;然后,他打开Chrome并使用相同的凭据再次登录。使用ID =“ B”创建一个会话。
创建会话“ B”时,我希望能够销毁会话“ A”。怎么做?
也。当Firefox中的用户执行任何操作时,我希望能够显示一个弹出窗口或某种通知,指出“您已注销,因为您已从其他地方登录”。
我有一个sessionListener,它跟踪创建和销毁的会话。问题是,我可以将HTTPSession对象保存在应用程序范围的Bean中,并在检测到用户两次登录后销毁它。但是有些事情告诉我,这是错误的,并且行不通。
JSF是否在服务器端某个位置跟踪会话?如何通过标识符访问它们?如果不是,当用户两次登录时如何踢出用户的第一次登录?
与数据库无关的方法是让变量User
具有一个static Map<User, HttpSession>
变量并实现HttpSessionBindingListener
(and
Object#equals()
和Object#hashCode()
)。这样,您的webapp在意外崩溃后仍然可以运行,这可能导致数据库值无法更新(您当然可以创建一个ServletContextListener
在webapp启动时重置数据库的,但这只是越来越多的工作)。
这是User
应该的样子:
public class User implements HttpSessionBindingListener {
// All logins.
private static Map<User, HttpSession> logins = new ConcurrentHashMap<>();
// Normal properties.
private Long id;
private String username;
// Etc.. Of course with public getters+setters.
@Override
public boolean equals(Object other) {
return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
}
@Override
public int hashCode() {
return (id != null) ? (this.getClass().hashCode() + id.hashCode()) : super.hashCode();
}
@Override
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = logins.remove(this);
if (session != null) {
session.invalidate();
}
logins.put(this, event.getSession());
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
logins.remove(this);
}
}
当您登录时User
,如下所示:
User user = userDAO.find(username, password);
if (user != null) {
sessionMap.put("user", user);
} else {
// Show error.
}
然后它将调用,valueBound()
该操作将从logins
地图中删除任何以前登录的用户并使该会话无效。
当您注销时User
,如下所示:
sessionMap.remove("user");
或会话超时时,valueUnbound()
将调用,将用户从logins
地图中删除。
我已经按照你在这篇博客中提到的步骤进行了操作。对于基本dn,他们给出了类似于'base dn-dc=,dc='的内容,但我给出了类似于'ecompany.local'的内容。因为我不是ldap管理员,所以我给了主体作为我的ldap id和我的ldap密码。当我单击test connection时,弹出窗口显示“Liferay已成功连接到LDAP服务器”。 重新启动了服务器。 点击登录。输入ldap
我正在使用hybridauth库。 Hybridauth文档说,通过存储会话数据,可以实现持久会话。 假设我在数据库中存储了用户会话数据。它包含oauth令牌、oauth刷新令牌等。。 使用oauth令牌,无需询问用户权限即可联系oauth服务器。 现在一切都好了。现在,如果用户登录到谷歌,如何准确地自动登录用户? ?
本文向大家介绍使用redis管理用户登录会话的方法,包括了使用redis管理用户登录会话的方法的使用技巧和注意事项,需要的朋友参考一下 登录和cookie缓存 对于用来登录的cookie,有两种常见的方法可以将登录信息存储在cookie里面:一种是签名(signed)cookie,另一种是令牌(token)cookie。 签名cookie通常会存储用户名,可能还有用户ID、用户最后一次成功登陆的时
最初的应用程序使用了基于XML的配置,所以我选择继续这样做。应用程序被设置为使用DAOAuthProvider,如果登录失败,则使用LDAP身份验证Provider。 我移植了应用程序,现在它启动了。我可以使用带有InMemoryDaoImpl bean的DaoAuthenticationProvider登录到应用程序,该bean保存凭据和角色。 但是,我面临的问题是: 日志段: 2014-07-
问题内容: 我有一个完全由Weblogic容器保护的Web应用程序。现在,我必须列出当前登录的用户。我必须为此使用Spring Security 2.0.4 在web.xml中,我定义了必要的侦听器和过滤器: 之后,按照我的理解,我定义了bean: 最后,我编写了一个简单的JSP页面,其中列出了用户: 这是我的帮助程序类尝试获取用户列表的方式: 不幸的是,所有这些都不起作用,我也不知道该如何调试。
问题内容: 以下是允许用户将数据存储到Firestore中的代码。问题是,登录到该应用程序的所有用户都可以查看上传的数据。我如何才能仅允许当前登录的用户仅存储其帐户的数据? 对于Firebase数据库,我使用以下代码(有效,但不适用于Firestore) FirebaseUser用户= FirebaseAuth.getInstance()。getCurrentUser(); 字符串userId =