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