Gostaria de saber como faço para implementar no projeto o logout.
Gostaria de saber como faço para implementar no projeto o logout.
Oi João, tudo bem?
O logout, você poderia fazer da seguinte forma:
Primeiro podemos criar um método desloga na classe UsuarioLogado
. Esse método atribui o valor null ao atributo que fica no objeto de sessão, que representa o usuário logado.
Como você atribui null, já não existe mais usuário e o interceptor se encarrega de fazer o resto.
@SessionScoped
@Named
public class UsuarioLogado implements Serializable {
private Usuario usuario;
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public void desloga() {
this.usuario = null;
}
}
O próximo passo é criar o método no LoginController
@Controller
public class LoginController {
private final UsuarioDao dao;
private final Result result;
private final Validator validator;
private final UsuarioLogado usuarioLogado;
@Inject
public LoginController(UsuarioDao dao, Result result, Validator validator, UsuarioLogado usuarioLogado) {
this.dao = dao;
this.result = result;
this.validator = validator;
this.usuarioLogado = usuarioLogado;
}
public LoginController() {
this(null, null, null, null);
}
@Get @Public
public void formulario(){}
@Post @Public
public void autentica(Usuario usuario) {
if(!dao.existe(usuario)) {
validator.add(new I18nMessage("login", "login.invalido"));
validator.onErrorUsePageOf(this).formulario();
}
usuarioLogado.setUsuario(usuario);
result.redirectTo(ProdutoController.class).lista();
}
@Get
public void logout() {
usuarioLogado.desloga();
result.redirectTo(this).formulario();
}
}
Por fim, você pode por um link na página web para que o usuário possa clicar. Algo mais ou menos assim:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>Listagem de produtos do ${usuarioLogado.usuario.nome}</h1>
<a href='<c:url value="/login/logout"/>'>Logout</a>
<ul>
<c:forEach var="produto" items="${produtoList}">
<li>${produto.nome} - ${produto.valor}</li>
</c:forEach>
</ul>
</body>
</html>
Faz sentido?
Abraço.
Fiz essa implementação e funcionou muito bem. Gostei da dica.