1
resposta

usuario <deslogado>

Opa pessoal,

estou encontrando um probleminha aqui no meu projeto ,

meu log não está informando os usuários somente <desconhecido> alguém saberia a causa ?

Segue código

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.Cookie;

import org.apache.catalina.servlet4preview.http.HttpServletRequest;

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

    private String usuario = "<deslogado>";

    @Override
    public void destroy() {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        getUsuario(req);

        System.out.println("Usuário "+ usuario +"acessando : " + req.getRequestURI());
        chain.doFilter(request, response);

    }
    private String getUsuario(HttpServletRequest req) {
        Cookie[] cookies = req.getCookies();
        if(cookies == null) {
            return this.usuario;
        } 

        for(Cookie cookie : cookies) {
            if(cookie.getName().equals("usuario.logado"))
                this.usuario = cookie.getValue();
        }
        return null;
    }
    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }

}
1 resposta

Olá João,

o problema aqui provavelmente ocorre por conta da String usuario estar como atributo da classe filtro. O servidor sempre criará apenas 1 instância de cada filtro e ela será compartilhada por todos os usuários do sistema. Ou seja, seria como se 10 usuários estivessem acessando sua aplicação, então os 10 estariam usando o mesmo objeto filtro e, consequentemente, o mesmo atributo usuário.

Faça com que o seu atributo usuario na verdade seja uma variável local do método doFilter e que o método getUsuario na verdade retorne este usuário do cookie. Isso deve corrigir o problema.