繁体   English   中英

会话注销/超时

[英]Session logout/ timeout

简而言之,这里是场景:

  • 浏览器的后退按钮必须正常工作(我使用的是JSF 2.0,因此可以正常工作)

  • 注销后,如果用户单击“后退”按钮,则应用程序必须将他/她重定向到登录页面(无法使用,尽管过期,该用户仍可以查看受保护的页面。我无法包含用于禁止浏览器缓存的meta标签。因为后退按钮停止工作)

  • 如果用户通过单击一个按钮在过期页面之一上调用操作,则应将他/她重定向到登录页面或错误页面(不起作用,该应用会引发错误并显示空白页面。我的ExceptionHandlerWrapper实现检测到异常,它正在使用NavigationHandler更改viewId并呈现响应(faces-config上指向“ login.jsf”的“ facesException”映射),但该应用程序的行为不符合预期)

有人可以帮我解决这个问题吗?

  • 浏览器的后退按钮必须正常工作(我使用的是JSF 2.0,因此可以正常工作)

  • 注销后,如果用户单击“后退”按钮,则应用程序必须将他/她重定向到登录页面(无法使用,尽管过期,该用户仍可以查看受保护的页面。我无法包含用于禁止浏览器缓存的meta标签。因为后退按钮停止工作)

解决此问题的两个步骤。

  1. 通过相应地设置响应头来禁用浏览器缓存。 您可以在FacesServlet上映射的Filter执行此操作。

     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); 
  2. 不要使用HTTP POST进行页面间导航。 始终使用HTTP GET进行页面间导航。 如果您需要提交表单,请将其提交给self(即,让action方法返回nullvoid ),然后使用h:messagesh:somecomponent rendered="#{success}"在条件下在同一页面中显示结果。


  • 如果用户通过单击一个按钮在过期页面之一上调用操作,则应将他/她重定向到登录页面或错误页面(不起作用,该应用会引发错误并显示空白页面。我的ExceptionHandlerWrapper实现检测到异常,它正在使用NavigationHandler更改viewId并呈现响应(faces-config上指向“ login.jsf”的“ facesException”映射),但该应用程序的行为不符合预期)

javax.faces.webapp.ViewExpiredException上使用<error-page>就足够了。 另请参阅此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM