Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/authentication/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication JSF2.3基于表单的登录和ViewExpiredException_Authentication_Jsf_Omnifaces_Viewexpiredexception - Fatal编程技术网

Authentication JSF2.3基于表单的登录和ViewExpiredException

Authentication JSF2.3基于表单的登录和ViewExpiredException,authentication,jsf,omnifaces,viewexpiredexception,Authentication,Jsf,Omnifaces,Viewexpiredexception,我目前有一个web应用程序部署在Wildfly 22上,使用JSF 2.3和OpenJDK 11。 我目前正在将登录页面从j_security_check迁移到以编程方式登录,以下是本文中的BalusC示例: 我没有发布登录代码,因为它与BalusC post一模一样 登录过程运行正常,除非登录页面上的会话超时过期。换句话说,当用户请求受保护的资源时,将显示登录页面。如果会话在提交登录表单之前过期,将抛出viewexpiredeexception,并向用户显示错误 我理解这是预期的行为,但这不

我目前有一个web应用程序部署在Wildfly 22上,使用JSF 2.3和OpenJDK 11。 我目前正在将登录页面从j_security_check迁移到以编程方式登录,以下是本文中的BalusC示例:

我没有发布登录代码,因为它与BalusC post一模一样

登录过程运行正常,除非登录页面上的会话超时过期。换句话说,当用户请求受保护的资源时,将显示登录页面。如果会话在提交登录表单之前过期,将抛出
viewexpiredeexception
,并向用户显示错误

我理解这是预期的行为,但这不是最终用户所期望的情况。 我使用OmniFaces的
ViewExpiredExceptionHandler
尽量减少了这种情况。 这样,当抛出
ViewExpiredException
时,OmniFaces处理程序将捕获它并使用查询字符串重定向到当前URL。 换句话说,用户尝试在会话到期后登录,并且登录页面再次显示给用户

我设法使用
{flash['org.omnifaces.view']eq-true}
向用户显示了一条很好的消息,说明发生了超时

有没有办法解决这种情况,即使会话过期也能成功登录,这样用户就不必输入两次凭据

谢谢你的帮助

有没有办法解决这种情况,即使会话过期也能成功登录,这样用户就不必输入两次凭据

是的,通过将
transient
属性设置为
true
来使用无状态JSF

<f:view transient="true">
    <h:form>
        ...
        <h:commandButton ... action="#{requestScopedBean.login}" />
    </h:form>
</f:view>

...
请注意,支持bean必须是
@RequestScoped
,而不是
@viewscope
或更广泛

另见:

嗨,我听从了你的建议,一切都很顺利。然后我意识到,在会话超时后,原始URL没有被保留,但通过公开getter和setter并添加到xhtml中就解决了这一问题。非常感谢你!不客气。