编程语言
首页 > 编程语言> > Java-jsf 2.0的“记住我”功能

Java-jsf 2.0的“记住我”功能

作者:互联网

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

最佳做法是什么?

解决方法:

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

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

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

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

附:

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

标签:autologin,java,jsf,jsf-2,remember-me
来源: https://codeday.me/bug/20191012/1903823.html