我与Spring Security的超时与JSF以下问题:JSF春季安全会话超时viewExpiredException
只是如果请求的页面被固定,我定制了sessionmanagement过滤器,以便将用户重定向到invalidSessionUrl (即,如果仅允许认证用户使用)。我投入由Spring Security提供的会话管理过滤器的自定义代码为:
if (invalidSessionUrl != null) {
String pagSolicitada = UtilSpringSecurity.extraerPagina(request);
if (UtilSpringSecurity.paginaAutenticada(pagSolicitada)) {
request.getSession();
redirectStrategy.sendRedirect(request, response, invalidSessionUrl);
return;
}
//the requested page doesn't require the user to be authenticated
//so i just skip this filter and continue with the filter chain
chain.doFilter(request, response);
return;
}
的方法“UtilSpringSecurity.extraerPagina(请求)”返回请求的页面是这样的:
public static String extraerPagina (HttpServletRequest request) {
String uri = request.getRequestURI().toLowerCase();
String cPath = request.getContextPath().toLowerCase();
// uri = cPath + pagina
int longCPath = cPath.length();
String pagina = uri.substring(longCPath);
return pagina;
}
而且方法“UtilSpringSecurity.paginaAutenticada(pagSolicitada)”如果帕拉姆是需要被认证的用户(我做的IF检查,考虑其具有属性access="isAuthenticated()"
我的XML安全配置文件的拦截-url元素),页面返回true :
public static boolean paginaAutenticada (String pagina) {
if (pagina.startsWith("/faces/paginas/administracion/") || pagina.startsWith("/faces/paginas/barco/")) {
return true;
}
return false;
}
此解决方案,但它只是一个问题:如果我离开浏览器,直到会话超时在页面停留空闲
,然后我请求同一个页面上,然后我得到一个“viewExpiredException ”。这是因为过滤器运行良好,它绕过了重定向到invalidSessionUrl,但随着会话过期,我得到该异常,试图重新呈现相同的页面。
如果我请求任何其他不安全的网页时,该会话timout已经过期,它工作得很好,它正确地重定向到页面,我没有得到viewExpiredException。
任何人知道如何解决这个问题?
预先感谢您。
'它绕过重定向到invalidSessionUrl,但随着会话过期无论如何,然后我得到那个异常试图重新呈现相同的页面。'我不明白这是什么意思。你是说当你重新渲染invalidSessionUrl时,你会得到一个ViewExpiredException? – 2012-02-22 12:09:53
你为什么要编写自己的会话管理过滤器? Spring安全性为您提供了这种功能。只需在Spring xml配置中添加以下内容: ... session-management> ' –
2012-02-22 12:14:18
回答第1条评论:'它绕过了重定向到invalidSessionUrl,但无论如何会话过期,然后我得到那个异常,试图重新呈现相同的页面。我的意思是,当我重新呈现浏览器在超时发生时显示的不安全页面时,我得到了“viewExpiredException”。发生这种情况是因为JSF无法构建页面的视图,因为会话已过期。 Spring Security会跳过会话管理过滤器,因为页面不安全(这没问题),但是当JSF尝试重新呈现页面时,它会抛出异常。 – choquero70 2012-02-22 21:48:15