Gostaria de saber como faço para implementar no projeto o logout.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.