[RESOLVIDO] Destruir Sessão e fechar aba do browser
4 respostas
I
ivesbertoli
Bom dia a todos…
Galera o seguinte, estou tentando finalizar uma seção aberta pela aplicação JSF, mas no momento em que o sistema finaliza a sessão, automaticamente ele chama o método para criar uma nova seção…
Eu não quero este comportamento, eu preciso que ele feche a aba do sistema…
o código que estou fazendo para finalizar a sessão é este:
você tambem pode usar um FacesListener para verificar se a sessao é nula se for redireciona para a página que quiser.
no FacesConfig.xml:
<!--Filtro responsável por verificar se a sessão ainda está ativa--><lifecycle><phase-listener>caixa.sc.sicff.util.AutorizadorPhaseListener</phase-listener></lifecycle>
Codigo Java:
publicclassAutorizadorPhaseListenerimplementsPhaseListener,Sicff{publicstaticfinalStringloginPage="/template.jsf";privatestaticfinallongserialVersionUID=1L;/** * Método chamado sempre após a execução de uma determinada PHASE * @param event - {@link PhaseEvent} */publicvoidafterPhase(PhaseEventevent){FacesContextfc=event.getFacesContext();if(fc.getViewRoot().getViewId().equals(loginPage)){return;}NavigationHandlernav=fc.getApplication().getNavigationHandler();nav.handleNavigation(fc,null,"login");}/** ** Método chamado sempre antes de se executar uma determinada PHASE * @param event - {@link PhaseEvent} */publicvoidbeforePhase(PhaseEventevent){ExternalContextcontext=FacesContext.getCurrentInstance().getExternalContext();HttpServletRequestrequest=(HttpServletRequest)context.getRequest();if(!request.getRequestURL().toString().endsWith(loginPage)&&(context.getSession(false)==null)){try{context.redirect(request.getContextPath()+loginPage);}catch(IOExceptione){logger.error("Erro ao tentar redirecionar para a página solicitada: "+e.toString());}}}/** * Retorna o PhaseId da fase do ciclo de vida JSF. * Neste caso indica que o PhaseListener será executado * durante todas as fases do JSF * @return - {@link PhaseId} */publicPhaseIdgetPhaseId(){returnPhaseId.RESTORE_VIEW;}}
I
ivesbertoli
Então, ele até finaliza a sessão, passa pelo ouvinte de sessão (sessionDestroyed), porém logo após executar o ouvinte de sessão, o sistema recria denovo e passa por todas as regras que estabeleci no sessionCreated.
O que eu preciso é inibir esta ação de criar nova sessão automaticamente…
Obrigado
I
ivesbertoli
Não sei se é realmente a melhor solução, mas resolvio o problema diminuindo o tempo de sessão inativa.