jsf中的会话超时

时间:2012-10-24 12:37:21

标签: java session jsf-2 session-timeout ajax4jsf

我有一个问题,我的整个JSF应用程序都基于Ajax请求

我们使用Ajax执行每个请求和所有内容

问题是当会话超时并且用户试图在页面上做任何事情时它什么都不做。

我知道会话已超时,但我无法抓住它。经过一些尝试后,我能够在每个请求后超时会话时捕获。但现在的问题是从筛选器或托管bean再次将用户重定向到登录屏幕,甚至使用js

请任何人都可以告诉我如何将用户重定向到登录屏幕

另请注意,我的应用程序中有三个页面:登录,索引和注销,一切都在索引页面中

提前致谢

1 个答案:

答案 0 :(得分:0)

你可以使用类似的东西,以便在你的超时过滤器内进行ajax重定向。您可以参考this thread

String facesRequestHeader = httpServletRequest
        .getHeader( "Faces-Request" );

boolean isAjaxRequest = facesRequestHeader != null
        && facesRequestHeader.equals( "partial/ajax" );

if( isAjaxRequest )
{
        String url = MessageFormat.format( "{0}://{1}:{2,number,####0}{3}",
        request.getScheme(), request.getServerName(),
        request.getServerPort(), timeoutPath );

        PrintWriter pw = response.getWriter();
            pw.println( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
        pw.println( "<partial-response><redirect url=\"" + url
        + "\"></redirect></partial-response>" );
        pw.flush(););
}
else
{
    httpServletResponse.sendRedirect( timeoutPath );
}