Erro no redirecionamento do Filter

Boa tarde galera.

Estou fazendo um sistema, e estou desenvolvendo a parte de controle de acesso, só que o atributo que eu guardo na session é perdida depois que ele passa pelo método doFilter pela primeira vez.

Na primeira vez que é feito acesso todos os atributos estão setados (esses atributos são setado por um Servlet que compara os dados da Basa de Dados com os digitados pelo usuário), passa pelo método doFilter do Filtro que eu criei, e chama a página principal do sistema.

Nesta página eu tento acessar outrar página qualquer do sistema (estão todas no mesmo diretório) e os atributos da sessão está vazio no momento que vai passar pelo Filter, ele retorna pra pagina de login por não existir nenhum atributo.

Desde já agradeço a todos.

Vlw.

Segue abaixo o meu código.

Filtro:

[code]
public class Filtro implements Filter {

public void init(FilterConfig config) throws ServletException {	}

public void doFilter(ServletRequest req, ServletResponse res,
		FilterChain chain) throws IOException, ServletException {

	HttpServletRequest request = (HttpServletRequest) req;
	HttpServletResponse response = (HttpServletResponse) res;
	
	HttpSession session = request.getSession();
	Usuario usuario = (Usuario) session.getAttribute("usuario");

	if (usuario == null) {
		response.sendRedirect("login.jsp");
	} else {
		chain.doFilter(req, res);
	}
}

public void destroy() {}

}[/code]

ServletLogin

[code]public class Logar extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {

	try {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		Usuario usuario = null; 
		
		try {
			usuario = new UsuarioDAO().findByUsername(username);
		} catch (Exception e) {
			throw new DatabaseException("Usuário não cadastrado");
		}

		if (usuario == null || !usuario.getUsername().equals(username) && !usuario.getPassword().equals(password)) {
			response.sendRedirect("/finex/login.jsp");
		} else {
			HttpSession session = request.getSession(); 
			
			session.setAttribute("usuario", usuario);
			response.sendRedirect("index.jsp");
		}
	} catch (Exception e) {
		throw new RuntimeException("Erro na tentativa de Login\n" );
	}

}

}[/code]

Você cria um objeto HttpSession e nele insere o atributo Usuario, assim, acredito que na próxima vez que o Filter for chamado, você terá perdido esse objeto.
Usa o session do próprio parametro request, assim: request.getSession().setAttribute("usuario",usuario);
Depois para recuperar é só usar o método getAttribute().

[code]
public class Filtro implements Filter {

public void init(FilterConfig config) throws ServletException { }  

public void doFilter(ServletRequest req, ServletResponse res,  
        FilterChain chain) throws IOException, ServletException {  

    HttpServletRequest request = (HttpServletRequest) req;  
    HttpServletResponse response = (HttpServletResponse) res;  
      
    Usuario usuario = (Usuario) request.getSession().getAttribute("usuario");  

    if (usuario == null) {  
        response.sendRedirect("login.jsp");  
    } else {  
        chain.doFilter(request, response);  
    }  
}  

public void destroy() {}  

} [/code][code]
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

    try {  
        String username = request.getParameter("username");  
        String password = request.getParameter("password");  
          
        Usuario usuario = null;   
          
        try {  
            usuario = new UsuarioDAO().findByUsername(username);  
        } catch (Exception e) {  
            throw new DatabaseException("Usuário não cadastrado");  
        }  

        if (usuario == null || !usuario.getUsername().equals(username) && !usuario.getPassword().equals(password)) {  
            response.sendRedirect("/finex/login.jsp");  
        } else {  
            request.getSession().setAttribute("usuario", usuario);  
            response.sendRedirect("index.jsp");  
        }  
    } catch (Exception e) {  
        throw new RuntimeException("Erro na tentativa de Login\n" );  
    }  

}  [/code]

Romarcio, essa sua alteração só vai diminuir a quantidade de linhas de código, mais o resultado será o mesmo. Você está fazendo a mesma coisa que eu fiz, só fez um inline do session!!!

Mesmo assim valeu…