Java 会话注销/超时
简而言之,下面是一个场景:Java 会话注销/超时,java,jsf-2,session-timeout,Java,Jsf 2,Session Timeout,简而言之,下面是一个场景: 浏览器后退按钮必须是功能性的(我使用的是JSF2.0,所以它可以正常工作) 注销后,如果用户单击“后退”按钮,应用程序必须将其重定向到登录页面(不工作,用户可以查看受保护的页面,尽管已过期。我无法包含元标记以禁用浏览器缓存,因为“后退”按钮停止工作) 如果用户通过单击过期页面上的按钮调用某个操作,则应将其重定向到登录或错误页面(不工作,应用程序会抛出错误并显示空白页面)。My ExceptionHandlerWrapper实现检测到异常,并使用NavigationH
- 浏览器后退按钮必须是功能性的(我使用的是JSF2.0,所以它可以正常工作)
- 注销后,如果用户单击“后退”按钮,应用程序必须将其重定向到登录页面(不工作,用户可以查看受保护的页面,尽管已过期。我无法包含元标记以禁用浏览器缓存,因为“后退”按钮停止工作)
- 如果用户通过单击过期页面上的按钮调用某个操作,则应将其重定向到登录或错误页面(不工作,应用程序会抛出错误并显示空白页面)。My ExceptionHandlerWrapper实现检测到异常,并使用NavigationHandler更改viewId并呈现响应(“faces配置上指向login.jsf的facesException”映射),但该应用程序的行为不符合预期)
- 浏览器后退按钮必须是功能性的(我使用的是JSF2.0,所以它可以正常工作)
- 注销后,如果用户单击“后退”按钮,应用程序必须将其重定向到登录页面(不工作,用户可以查看受保护的页面,尽管已过期。我无法包含元标记以禁用浏览器缓存,因为“后退”按钮停止工作)
FacesServlet
的过滤器中执行此操作
HttpServletResponse hsr = (HttpServletResponse) response;
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
hsr.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);
null
或void
),并使用h:messages
或h:somecomponent rendered=“#{success}”
有条件地在同一页面中显示结果- 如果用户通过单击过期页面上的按钮调用某个操作,则应将其重定向到登录或错误页面(不工作,应用程序会抛出错误并显示空白页面)。My ExceptionHandlerWrapper实现检测到异常,并使用NavigationHandler更改viewId并呈现响应(faces配置上的“facesException”映射(指向login.jsf),但应用程序的行为不符合预期)
javax.faces.webapp.ViewExpiredException
上的
已经足够了。另请参阅
- 浏览器后退按钮必须是功能性的(我使用的是JSF2.0,所以它可以正常工作)
- 注销后,如果用户单击“后退”按钮,应用程序必须将其重定向到登录页面(不工作,用户可以查看受保护的页面,尽管已过期。我无法包含元标记以禁用浏览器缓存,因为“后退”按钮停止工作)
FacesServlet
的过滤器中执行此操作
HttpServletResponse hsr = (HttpServletResponse) response;
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
hsr.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);
null
或void
),并使用h:messages
或h:somecomponent rendered=“#{success}“
有条件地在同一页中显示结果- 如果用户通过单击过期页面上的按钮调用某个操作,则应将其重定向到登录或错误页面(不工作,应用程序会抛出错误并显示空白页面)。My ExceptionHandlerWrapper实现检测到异常,并使用NavigationHandler更改viewId并呈现响应(faces配置上的“facesException”映射(指向login.jsf),但应用程序的行为不符合预期)
javax.faces.webapp.ViewExpiredException上的
已经足够了。另请参见。您检查了吗?是的,我检查了。它使用了元标记并使后退按钮无效。您检查了吗?是的,我检查了。它使用了元标记并使后退按钮无效。您好,谢谢您的回复。不幸的是,您的解决方案不能是used,因为应用程序已经生成。大多数表单提交到确认页面,这意味着所有应用程序都必须更改。那么“后退”按钮呢?您的解决方案不会弄乱它吗?不会,因为只有GET才能进行页到页导航。只有没有缓存头的POST请求才不会提供他在返回导航时发出的警告已经过期。您还可以引入PRG模式,Post Redirect GET,将
添加到导航案例中。但这涉及到其他desastreus更改(请求范围的bean将很快被丢弃).关于ViewExpiredException,我尝试了通过web.xml和ExceptionHandlerWrapper,但都没有显示登录页面(事实上,它说过期的页面是login.jsf)。这是ajax还是普通请求?如果是ajax,您需要发送重定向,而不是替换viewId
。您好,感谢您的回复。不幸的是,您的解决方案无法使用,因为应用程序已经生成。大多数表单提交到确认页面,这意味着必须更改所有应用程序。那么t呢“返回”按钮?您的解决方案不会弄乱它吗?不会,因为只有页到页导航的GET。只有没有缓存头的POST请求才会在返回时发出此类过期警告。您还可以引入PRG模式,POST Redirect GET,将
添加到导航案例中。但这涉及到其他方面r desastreus更改(请求范围的bean将很快被丢弃)。关于ViewExpiredException,我尝试通过web.xml和ExceptionHand