我有一个Web应用程序,目前部署在Wildfly 22上,使用JSF 2.3和OpenJDK 11。我正在将登录页面从j_security_check迁移到编程式登录,遵循BalusC在此帖子中的示例:
在Java EE / JSF中使用j_security_check执行用户身份验证
我不会发布登录代码,因为它与BalusC的帖子完全相同。登录过程正常工作,但当登录页面的会话超时到期时出现问题。换句话说,当用户请求受保护的资源时,会呈现出登录页面。如果在提交登录表单之前会话过期,则会引发ViewExpiredException并向用户显示错误。
我知道这是期望的行为,但对于最终用户来说并不是理想的情况。我使用OmniFaces的
在Java EE / JSF中使用j_security_check执行用户身份验证
我不会发布登录代码,因为它与BalusC的帖子完全相同。登录过程正常工作,但当登录页面的会话超时到期时出现问题。换句话说,当用户请求受保护的资源时,会呈现出登录页面。如果在提交登录表单之前会话过期,则会引发ViewExpiredException并向用户显示错误。
我知道这是期望的行为,但对于最终用户来说并不是理想的情况。我使用OmniFaces的
ViewExpiredExceptionHandler
成功地减少了这种情况。这样,当抛出ViewExpiredException
时,OmniFaces处理程序将捕获它并重定向到带有查询字符串的当前URL。换句话说,当会话过期后,用户尝试登录并且登录页面再次呈现给用户。我成功地使用了#{flash['org.omnifaces.view_expired'] eq true}
,以便向用户呈现漂亮的消息,解释超时发生了。是否有任何方法可以解决这种情况,并在会话过期时执行成功的登录,以便用户不必输入他的凭据两次?谢谢你的帮助!