登录后,在重新访问时自动登录JSF应用程序

对于典型的最典型的面向互联网的网站,当您通过关闭选项卡登录和离开网站时( 不登出 ),然后在连续重访时,您可能不需要重新指定您的凭据或登录,您直接登录。

如何在后端发生这一切? 如何在我的JSF 2.1应用程序上启用此类机制?


在Tomcat7服务器上使用JSF 2.1

这基本上是由一个长寿cookies完成的。 JSF API不提供此function,因为它只是一个基于组件的简单MVC框架。 标准Java EE API也不提供此function。 一些认证框架,如Spring Security和Apache Shiro提供此function。

如果您需要使用“普通”Java EE / JSF来实现它,那么您需要在登录期间通过ExternalContext#addResponseCookie()自己创建一个长期存在的cookie。 cookie值必须是一个长的,唯一的,自动生成且难以猜测的值(例如java.util.UUID ),您还将其存储在与用户ID关联的DB中。 然后,当已确认登录用户不在时,您可以使用简单的servletfilter通过HttpServletRequest#getCookies()检查cookie。 如果找到cookie并且该cookie有效,则自动登录该用户。

为了提高安全性,请在必要时为最终用户提供将此cookie“锁定”在您也存储在数据库中的用户IP以及cookie ID和用户ID的选项。

也可以看看:

  • 当用户登录Web应用程序时,如何实现“保持登录状态”
  • 如何让用户登录我的网站好几个月?

如果您使用的是Spring Security或Apache Shiro,它们都会使用适当的filter来支持它。 在后端Spring Security通过持久存储记住我的令牌来工作,而Shiro我认为签署哈希值。

这是春季指南: http : //static.springsource.org/spring-security/site/docs/3.0.x/reference/remember-me.html

这是shiro指南: http : //shiro.apache.org/java-authentication-guide.html

如果您正在使用Java EE Security(请告诉我并非如此),除非您想设计客户登录filter,否则您只能使用容器可以支持的内容。 客户filter可以使用MAC代码对cookie进行签名,并根据数据库对其进行validation。 我不相信tomcat 7内置了这个,你可能需要查看GlassFish(它支持SSO,我不认为它支持记住我)。