8
respostas

Exercício 03 Mostrando o usuário logado

Fiz as alterações solicitadas mas ao executar a rota de login obtenho as seguintes logs: Na primeira execução o log é: Usuario null acessando a URI /gerenciador/login Na segunda execução o log é: Usuario br.com.alura.gerenciador.Usuario@27975aae acessando a URI /gerenciador/login

Tentei comparar minha solução com a solução do site mas não encontrei a servlet FiltroDeAuditoria na solução do site.

Pesquisei todas as as dúvidas expostas e suas respectivas respostas. Infelizmente não consegui exito.

Alguém consegue me ajudar?

8 respostas

Boa tarde Anderson, pode postar seu código por favor?

Boa tarde Guilherme,

Segue o código:

@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

HttpSession session = req.getSession(); Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");

/* String usuario = "";

if (usuario.getEmail() != null) { usuario = usuario.getEmail(); } */

System.out.println("Usuario " + usuario + " acessando a URI " + req.getRequestURI());

chain.doFilter(request, response);

}

Observação: Entendo que no println estou referenciando o objeto usuário, mas também tomei erro quando referenciei usuario.getEmail().

Feliz 2018!

Feliz 2018 pra você também!

Seu código parece estar correto, o que chutaria aqui é que não tem nenhum usuário logado, por isso a informação é null e causam os erros.

Bom dia Guilherme, Você sabe porque mesmo quando existe um usuário logado o que aparece na log é: br.com.alura.gerenciador.Usuario@27975aae e não o endereço de e-mail digitado?

Bom dia Anderson, pois está imprimindo essa linha:

System.out.println("Usuario " + usuario + " acessando a URI " + req.getRequestURI());

Então quando imprimi o usuario, ele procura na classe Usuario o método toString(), que por não estar implementado ele mostra essa mensagem padrão, agora se fizer usuario.getEmail() e esse usuário logado tiver um email cadastrado o email parece

Guilherme, quando implementei dessa forma

insira seu código aquiSystem.out.println("Usuario " + usuario.getEmail() + " acessando a URI " + req.getRequestURI());

Tomei um status 500 já ao carregar o http://localhost:8080/gerenciador/:

HTTP Status 500 – Internal Server Error java.lang.NullPointerException br.com.alura.gerenciador.web.FiltroDeAuditoria.doFilter(FiltroDeAuditoria.java:42)

Tentei implementar um if: if (usuario.getEmail() != null){ System.out.println("Usuario " + usuario.getEmail() + " acessando a URI " + req.getRequestURI()); }

Mas o problema persiste.

Anderson, coloca um ponto de debug nesse if e vê o que está chegando em usuário, porque se apareceu o toString em algum momento não poderia dar null pointer, só se o processo que fez agora foi algo diferente e nesse momento não tinha nenhum usuário logado

Guilherme, coloquei o ponto de debug. O usuario é null.

Implementei a Filtro de Auditoria da seguinte forma:

package br.com.alura.gerenciador.web;

import java.io.IOException;

import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession;

import br.com.alura.gerenciador.Usuario;

@WebFilter(urlPatterns = "/*") public class FiltroDeAuditoria implements Filter {

@Override public void destroy() {

}

@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

HttpSession session = req.getSession(); Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");

if (usuario != null && usuario.getEmail() != null){ System.out.println("Usuario " + usuario.getEmail() + " acessando a URI " + req.getRequestURI()); } chain.doFilter(request, response);

}

@Override public void init(FilterConfig config) throws ServletException {

} }

Pensei que ao fazer o login com email /senha válidos ( guilherme.silveira@alura.com.br / silveira ) o usuário não estaria mais null. Mas ele sempre é null.

Vc sabe dizer porque?

Eu pensei que estaria instanciando o objeto ao fazer: Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");

E que ele não seria null quando eu entrasse com email/senha válidos, mas não é isso.

Vc consegue me explicar o que faltou eu fazer? E pq?