[Resolvido] Logout JAAS (JSF+Primefaces)

Boa noite pessoal!

To com um problema aqui…
Não to conseguindo efetuar logout na minha aplicação!

Efetuei o login utilizando JAAS (JBoss).

Página login.xhtml:

<ui:define name="conteudo">
		<p>Login:</p>
		<form method="post" action="j_security_check">
			<h:panelGrid columns="2">
				<h:outputLabel for="j_username" value="Email" />
				<h:inputText id="j_username" name="j_username" />
				<h:outputLabel for="j_password" value="Senha" />
				<h:inputSecret id="j_password" name="j_password" />
				<input type="submit" name="submit" value="Login" />
			</h:panelGrid>
			<br />
		</form>
	</ui:define>

Quando o login é efetuado, os menus correspondentes ao perfil aparecem. Até aí tá funcionando bonito!
Em todos os menus eu coloquei um menuitem ‘Sair’ para efetuar logout, porém não estou conseguindo configurar esse menuitem para realmente efeutar logout! :x
Já tentei session.invalidate (como está no código abaixo), j_security_logout, mudei para link e nada… :frowning:

menu.xhtml:

		<p:submenu label="Administração" rendered="#{request.isUserInRole('ADMIN')}">
				... <outros itens> ...
				<p:menuitem value="Sair" url="/publico/index.jsf" icon="ui-icon-close" action="session.invalidate()"/>		
		</p:submenu>	

Alguém aí pode me ajudar?!

crie um bean chamado logout ou algo do tipo e crie um metodo dentro dele.

ai chame ele com esse conteudo dentro

FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate();

[quote=michelorth_92]crie um bean chamado logout ou algo do tipo e crie um metodo dentro dele.

ai chame ele com esse conteudo dentro

FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate(); [/quote]

Ficaria assim?

Logout.java

@ManagedBean
@SessionScoped
public class Logout {

	public void efetuarLogout(){
		FacesContext fc = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
		session.invalidate();
	}
}

menu.xhtml

<p:submenu label="Administração" rendered="#{request.isUserInRole('ADMIN')}">
      <p:menuitem value="Sair" url="/publico/index.jsf" icon="ui-icon-close" action="#{logout.efetuarLogout}"/>			
</p:submenu>

Fiz desse jeito e não funfou… :confused:

<p:menuitem value=“Sair” icon=“ui-icon-close” action="#{logout.efetuarLogout}" ajax=“false”/>

tente assim

depois de clicar no botão tente navegar pelo sistema pra ver se encerou ou não a session

[quote=michelorth_92]<p:menuitem value=“Sair” icon=“ui-icon-close” action="#{logout.efetuarLogout}" ajax=“false”/>

tente assim[/quote]

Funcionou! :slight_smile:

pois é… Agora como faz pra não precisar ter que navegar pra atualizar a página?!
Apesar do ajax desabilitado, tem como direcionar para uma página inicial, por exemplo?

Obrigado!! :wink:

finaliso a session???

pra retornar para a pagina de login novamente é só voce fazer assim

public String efetuarLogout(){
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate();

return “endereçodologin”;
}

Finalizou sim!

Tá funcionando que é uma blza! :wink:

Muito obrigado!!! :smiley:

vlw