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.