Olá,
Quando a minha sessão expira, e o usuário tentar fazer alguma requisição para o server, ele redireciona para a minha pagina de login, para isso funcionar eu coloco a seguinte configuração no meu web.xml:
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/login.xhtml</location>
</error-page>
Até ai tudo certo, funciona perfeitamente, mas o problema é quando é feita uma requisição ajax, a tela fica travada e ele não redireciona para a pagina de login.
Grato.
Ajax realmente não é feito para realizar redirecionamentos.
Vc terá que procurar como redirecionar utilizando ajax, talvez por phaselistener. Veja se esse post te ajuda: http://semprejava.wordpress.com/2010/08/04/25/ .
Então, tentei seguir este exemplo:
http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/ArchitectureOverview.html#RequestErrorsAndSessionExpirationHandling
Porém, não funcionou, estou usando o ajax do primefaces, deve ser por isso.
Obrigado pela ajuda.
[quote=fernandosc]Então, tentei seguir este exemplo:
http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/ArchitectureOverview.html#RequestErrorsAndSessionExpirationHandling
Porém, não funcionou, estou usando o ajax do primefaces, deve ser por isso.
Obrigado pela ajuda.[/quote]
Eu creio que você está utilizando o Ajax do Mojara (ou qualquer outra implementação) e não ajax do Primefaces. Até onde eu sei ele os exemplos dele rodam com Mojara.
Ele não implementou o Ajax apenas faz uso dele.
Boa sorte aí. [=
Conseguir resolver meu problema seguindo este exemplo:
http://wiki.icefaces.org/display/ICE/Spring+Security
fernandosc
Estou com o mesmo problema, você teve que adiconar o icefaces ao seu projeto?
Ou resolveu apenas com o spring security?
Obrigado
Apenas com o Spring Security.
uma altenativa ainda mais simples é usar a API OmniFaces 1.1: http://showcase-omnifaces.rhcloud.com/
após configurar seu classpath, simplesmente adicione no seu faces-config.xml
<factory>
<exception-handler-factory>
org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
</exception-handler-factory>
</factory>
No meu ambiente (glassFish 3.1.2, primeFaces 3.3.1, mojarra 2.1.6) funcionou muito bem !
raf_ho
Junho 6, 2013, 5:44pm
#9
uma boa alternativa
[code]
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
ServletException {
try {
// chain…
HttpServletRequest request = (HttpServletRequest) req;
if (isAjax(request) && !request.isRequestedSessionIdValid()) {
log.warn(“Session expiration during ajax request, partial redirect to login page”);
HttpServletResponse response = (HttpServletResponse) resp;
response.getWriter().print(xmlPartialRedirectToPage(request, “/login?session_expired=1”));
response.flushBuffer();
}
else {
chain.doFilter(req, resp);
}
} catch (Exception e) {
// redirect to error page
HttpServletRequest request = (HttpServletRequest) req;
request.getSession().setAttribute(“lastException”, e);
request.getSession().setAttribute(“lastExceptionUniqueId”, e.hashCode());
log.error("EXCEPTION unique id: " + e.hashCode(), e);
HttpServletResponse response = (HttpServletResponse) resp;
if (!isAjax(request)) {
response.sendRedirect(request.getContextPath() + request.getServletPath() + “/error”);
} else {
// let’s leverage jsf2 partial response
response.getWriter().print(xmlPartialRedirectToPage(request, “/error”));
response.flushBuffer();
}
}
}
private String xmlPartialRedirectToPage(HttpServletRequest request, String page) {
StringBuilder sb = new StringBuilder();
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
sb.append("<redirect url="").append(request.getContextPath()).append(request.getServletPath()).append(page).append(""/>");
return sb.toString();
}
private boolean isAjax(HttpServletRequest request) {
return “XMLHttpRequest”.equals(request.getHeader(“X-Requested-With”));
}[/code]