[RESOLVIDO] Destruir Sessão e fechar aba do browser

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:

 if (session != null) {
    session.invalidate();
    return;
 }

Valeu… obrigado !!!

eu faço assim: chamo a função logout atraves de um botao e mato a sessao e redireciono para a página que eu quero.

public String logout() {
        //Redireciona o usuário para tela de login efetuando o logout.
        String loginPage = "/redirecionamento.jsp";
        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
        HttpServletRequest request = (HttpServletRequest) context.getRequest();
        try {
            context.redirect(request.getContextPath() + loginPage);
        } catch (IOException e) {
            logger.error("Erro ao tentar redirecionar para página solicitada ao efetuar Logout: " + e.toString());
        }
        HttpSession session = (HttpSession) context.getSession(false);
        session.invalidate();

        return "logout";
    }

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:

public class AutorizadorPhaseListener implements PhaseListener, Sicff {
    public static final String loginPage = "/template.jsf";
    private static final long serialVersionUID = 1L;

    /**
    * Método chamado sempre após a execução de uma determinada PHASE
    * @param event - {@link PhaseEvent}
    */
    public void afterPhase(PhaseEvent event) {
        FacesContext fc = event.getFacesContext();
        if (fc.getViewRoot().getViewId().equals(loginPage)) {
            return;
        }
        NavigationHandler nav = fc.getApplication().getNavigationHandler();
        nav.handleNavigation(fc, null, "login");
    }

    /**
     ** Método chamado sempre antes de se executar uma determinada PHASE
     * @param event - {@link PhaseEvent}
     */
    public void beforePhase(PhaseEvent event) {
        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
        HttpServletRequest request = (HttpServletRequest) context.getRequest();

        if (!request.getRequestURL().toString().endsWith(loginPage) && (context.getSession(false) == null)) {
            try {
                context.redirect(request.getContextPath() + loginPage);
            } catch (IOException e) {
                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}
     */
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
}

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

Não sei se é realmente a melhor solução, mas resolvio o problema diminuindo o tempo de sessão inativa.

Codigo JSF

actionListener="#{MB.fechar}" oncomplet="window.close();"

Método fechar() do MB

session.setMaxInactiveInterval (2); //Tempo em segundos.