Bom dia pessoal.
Tenho uma aplicação em jsf rodando em tomcat e ao clicar no menu sair, preciso que a sessão do tomcat seja invalidada
meu item de menu:
<p:menuitem action="#{loginBean.logoff}" value="SAIR" url="http://www.jvmsoftware.com.br" icon="ui-icon-close" />
meu bean:
@ManagedBean
@SessionScoped
public class LoginBean implements Serializable {
.....
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
public LoginBean() {
}
public String login() throws ClassNotFoundException, SQLException {
// logica do login
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.login(): {0}", usr);
//String logged;
RequestContext context = RequestContext.getCurrentInstance();
senhaMD5 = md5.md5(pas);
usuario = usuImp.getUsuariosByUsern(usr);
empresa = empImp.getEmpresaById(usuario.getAcsEmpresa().getIdEmpresa());
//seta sistema para: DLV - delivery
sistema = sisImp.getSistemaByCodigo("DLV");
relSisEmp = relSisEmpImp.getRelSistemaEmpresa(empresa, sistema);
relSisUsu = relSisUsuImp.getRelSistemaUsuario(usuario, sistema);
if (relSisEmp.isAtivo() == false) {
loggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login Error: ", "a empresa " + empresa.getFantasia() + " não está autorizada a utilizar o sistema: " + sistema.getNomeSistema());
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.login(): relSisEmp.isAtivo() == false");
} else if (relSisUsu.isAtivo() == false) {
loggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login Error: ", "o usuario " + usuario.getNomeUsuario() + " não está autorizado a utilizar o sistema: " + sistema.getNomeSistema());
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.login(): relSisEmp.isAtivo() == false");
} else if (usuario == null) {
loggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login Error: ", "usuario não encontrado!: " + usr);
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.login(): usuario == null");
} else if (usuario.isAtivo() == false) {
loggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login Error: ", "usuario bloqueado!: " + usuario.getNomeUsuario());
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.login(): usuario.isAtivo() == false");
} else if (empresa.isAtivo() == false) {
loggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login Error: ", "empresa bloqueada!: " + empresa.getFantasia());
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.login(): empresa.isAtivo() == false");
} else {
if(usr != null && usr.equals(usuario.getUsern()) && pas != null && senhaMD5.equals(usuario.getSenha())) {
loggedIn = true;
// implementar ações após login confirmado
// verificação de primeiro acesso
primAcessoImp.PrimeiroAcesso(empresa);
// seta parametros na sessão tomcat
request.getSession().setAttribute("userName", usuario.getUsern() + " / " + sistema.getCodSistema());
// seta mensagem
msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bem vindo! ", usuario.getUsern());
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.login(): usuario e senha ok");
} else {
loggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login Error: ", "senha invalida!");
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.login(): senha invalida");
}
}
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "usuario: {0}", usuario.getUsern());
FacesContext.getCurrentInstance().addMessage(null, msg);
context.addCallbackParam("loggedIn", loggedIn);
if (loggedIn == true) {
logged = "principal.xhtml";
logado = true;
empresa = empImp.getEmpresaById(usuario.getAcsEmpresa().getIdEmpresa());
// carrega variavel menu (referente ao menu)
carregaMenu();
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.loggedIn - true: /usr: {0}", usr);
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "LoginBean.loggedIn - true: /sis: {0}", sistema.getCodSistema());
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "logged: principal.xhtml");
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "usr: {0}", usr);
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "sis: {0}", sistema.getCodSistema());
//relBean.carregaAplicativosUsuario();
} else {
logged = "index.xhtml";
logado = false;
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "logged: index.xhtml");
}
//return logged;
//controller.geraMenu();
Logger.getLogger(LoginBean.class.getName()).log(Level.INFO, "chegou no return do logged");
return logged;
}
public String Logado() {
return logged;
}
private void carregaMenu() {
System.out.println("LoginBean.carregaMenu()");
List<AcsRelMenuUsuario> permMenu;
try {
permMenu = relMenuUsuImp.listRelMenuUsuarioByUsuario(usuario, sistema);
for (int i = 0; i < permMenu.size(); i++) {
InverteBoolean converte = new InverteBoolean();
disable.put(permMenu.get(i).getAcsMenus().getCodMenu(), converte.mudaBoolean(permMenu.get(i).isAtivo()));
menu.put(permMenu.get(i).getAcsMenus().getCodMenu(), permMenu.get(i));
// System.out.println("LoginBean.carregaMenu().cod: " + permMenu.get(i).getAcsMenus().getCodMenu() +
// disable.get(i).booleanValue());
}
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(e.getMessage(), new FacesMessage(FacesMessage.SEVERITY_INFO, e.getMessage(), e.getMessage()));
}
}
// metodo para invalidar a sessão do tomcat
public void logoff() {
System.out.println("LoginBean.logoff(): ");
request.getSession().invalidate();
}
...
}
O problema, é que ao clicar no botão sair, a sessão do tomcat não é invalidada.