gpt4 book ai didi

jsf - session 失效后单击浏览器后退按钮时防止 ViewExpiredException

转载 作者:行者123 更新时间:2023-12-04 06:25:29 25 4
gpt4 key购买 nike

我想弄清楚如何防止 Session Fixation在 Glassfish 3.1 中的 JSF 登录表单上。
使用 Servlets 很容易做到,所以我试图对 JSF 做同样的事情(基于这个问题:Retrieving session ID value from a JSF request):

FacesContext fCtx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
session.invalidate();
fCtx.getExternalContext().getSession(true);

它似乎有效,但是当我单击浏览器的后退按钮并重新输入登录详细信息时,我得到:

javax.faces.application.ViewExpiredException: viewId:/index.xhtml - View /index.xhtml could not be restored.



只有在“刷新”并重新发送后它才能再次工作。

那可能是什么原因?

最佳答案

您需要指示浏览器不是 缓存 JSF 页面。创建一个 Filter映射为 @WebFilter(servletNames={"facesServlet"})并在 doFilter() 中执行以下工作方法

HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(req, res);

这将强制浏览器在按下后退按钮时触发一个全新的 GET 请求。否则它只会从缓存中返回页面,然后表单提交将失败,因为服务器端 View 状态随着 session 失效而丢失。

关于jsf - session 失效后单击浏览器后退按钮时防止 ViewExpiredException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com