如果浏览器关闭而不使当前会话无效,如何使jsf 2.0中的会话无效。

时间:2011-10-12 11:58:03

标签: session jsf-2

如果我关闭浏览器而不会使会话无效,那么我不希望它再次登录而无法访问我的应用程序。

并且不希望我的用户使用后退按钮评估受限用户页面。

我如何在JSF 2.0中执行此操作?

1 个答案:

答案 0 :(得分:2)

  

如果浏览器关闭而不会使当前会话无效,如何使jsf 2.0中的会话无效。

您无法以可靠的方式以编程方式执行此操作。然而,会话将在30分钟后自动失效。如果您打开一个新浏览器,则将创建一个新会话,并且将无法再访问上一个会话。


  

并且不希望我的用户使用后退按钮评估受限制的用户页面。

您需要指示浏览器缓存这些受限制的用户页面。您可以通过创建filter来实现此目的,该{{3}}映射到覆盖这些页面的URL模式,并在doFilter()方法中执行以下作业:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpReq = (HttpServletRequest) request;
    HttpServletResponse httpRes = (HttpServletResponse) response;

    if (!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
        httpRes.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
        httpRes.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        httpRes.setDateHeader("Expires", 0); // Proxies.
    }

    chain.doFilter(request, response);
}

这样,浏览器每次都被迫发送一个完整的HTTP请求,而不是从浏览器缓存中显示该页面。