当前位置: 首页 > 面试题库 >

jsf 2.0的“记住我”功能

曾绯辞
2023-03-14
问题内容

我正在尝试实现“记住我”
/“自动登录”功能。我已经在客户端存储了一个cookie,但是什么时候应该阅读它?例如,如果尝试在过滤器中执行此操作,则将无法访问用于访问数据库的应用程序范围的bean。

最佳做法是什么?


问题答案:

这在某种程度上取决于您当前的登录名是如何工作的。是容器登录后跟自定义内容(例如在会话中放置一些对象)还是仅自定义?

在第一种情况下,您无法在JSF中完全自动登录,因为只要用户尝试访问受保护的资源,容器就会启动。在这种情况下,您仍然需要在过滤器(HttpServletRequest#login)中进行容器登录。

对于第一种情况和第二种情况,JSF部分都可以通过global完成PhaseListener。在这种情况下,您可以收听非常早的事件,例如before RESTORE_VIEW。在此事件处理程序中,您可以检查会话中是否放置了任何对象以标记您的登录,如果不存在,请使用HttpServletRequest来检查是否存在“记住我”
cookie,并在需要时继续登录。当PhaseListener被调用时,JSF是全面运作,你可以访问你的应用程序范围的托管bean。

如果您仅在会话中使用一个对象并且不打扰任何容器登录,那么您只需跳过第一部分。

ps

另一个选择是不将任何数据库内容放入JSF托管Bean中,因此您不需要JSF操作即可访问数据库。在Java EE应用程序中,EJB
bean是替代候选对象(实际上更适合此工作)。它们可以注入到您的过滤器中,并可以在JSF生命周期开始之前用于访问数据库。除了EJB bean,CDI
bean也可以选择。在许多方面,无论如何,这些都是JSF托管bean的更好替代方案。



 类似资料:
  • 问题内容: 我正在寻找一种更好的方法来解决我的问题。我在登录表单上记得我的功能。用户单击“记住我”框,“我的API”向我发送令牌。 我的问题是,当用户返回我的网站时,存储此令牌并再次对其进行身份验证的最佳方法是什么? 我以为 创建一个Cookie并在其中存储令牌。 创建本地存储。 请给我任何可能对我有帮助的建议。 问题答案: 我将document.cookie与这样的工厂代码一起使用: 创建一个c

  • 8.2 节实现的登录系统自成一体且功能完整,不过大多数网站还会提供一种功能——用户关闭浏览器后仍能记住用户的会话。本节,我们首先实现自动记住用户会话的功能,只有用户明确退出后会话才会失效。8.4.5 节实现另一种常用方式:提供一个“记住我”复选框,让用户选择是否记住会话。这两种方式都很专业,GitHub 和 Bitbucket 等网站使用第一种,Facebook 和 Twitter 等网站使用第二

  • 问题内容: 我有一个登录页面,我想添加“记住我”功能;因此,如果用户注销并再次打开页面,则会加载其用户名和密码。为此,当用户登录(并选中“记住我”)时,我保存了以下cookie: 问题是稍后(在同一会话中)我阅读了cookie,然后看到maxAge = -1; 即使我将其设置为3600 …为什么呢?另一个问题:如果我使用userCookie.setSecure(true)将cookie设置为安全,

  • 本文向大家介绍ThinkPHP3.2.2实现持久登录(记住我)功能的方法,包括了ThinkPHP3.2.2实现持久登录(记住我)功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ThinkPHP3.2.2实现持久登录功能的方法。分享给大家供大家参考,具体如下: 实现持久登录,即用户在登录时,勾选了"记住我"之后,无论是否关闭浏览器,只要不退出登录,在指定的时间内始终保持登录状态(缺

  • 我正在和Spring Boot一起开发一个集成了LDAP的应用程序。我能够成功地连接到LDAP服务器并验证用户。现在,我需要添加“记住我”功能。我试图通过不同的职位(这),但无法找到我的问题的答案。官方的Spring安全文件指出 如果您正在使用不使用UserDetailsService的身份验证提供程序(例如,LDAP提供程序),那么它将不起作用,除非您的应用程序上下文中也有UserDetails

  • 问题内容: 我正在尝试测试登录表单的“记住我”功能。我可以输入用户名和密码,单击复选框,单击提交,或浏览器。但是,当我使用(或任何其他实现)重新打开浏览器时,测试站点不记得任何内容,因为在关闭浏览器时所有cookie都会被删除,而在重新打开浏览器时将无法访问。 问题答案: 对于Chrome(配置): 您必须将路径设置为user-dir,这将在您首次登录后保存所有登录信息。下次再次登录时,将从用户目