Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Java 会话注销/超时_Java_Jsf 2_Session Timeout - Fatal编程技术网

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);
    
  • 不要使用HTTP POST进行页到页导航。始终使用HTTP GET进行页到页导航。如果需要提交表单,请将其提交给self(即让action方法返回
    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);
    
  • 不要使用HTTP POST进行页到页导航。始终使用HTTP GET进行页到页导航。如果需要提交表单,请将其提交给self(即让操作方法返回
    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