Controle de Acesso com Servlets

Boa Noite pessoal,
Minha dúvida é a seguinte.

Estou escrevendo um programinha, ate ai beleza ta tudo funcionando o meu problema começou na hora de
criar o controle de acesso.

Eu criei um método de acesso que faz uma lista mas nao estou conseguindo passar os parâmetros corretamente
o meu método lista todos os campos do banco, e nao traz o especifico que preciso. segue código

[code]
//classe usuárioDAO
public List obtemUsuario() {
try {
List usuarios = new ArrayList();
PreparedStatement ps = this.conexao.prepareStatement(“select * from usuario WHERE login=?”);
ResultSet rs = ps.executeQuery();

			while(rs.next())
				{
					Usuario usuario = new Usuario();
					
					usuario.setLogin(rs.getString("login"));
					usuario.setSenha(rs.getString("senha"));
					usuarios.add(usuario);
											
				}
			ps.close();
			rs.close();
					
			return usuarios;		
	} catch (SQLException e) {
		throw new RuntimeException(e);

	} finally {
		try {
			conexao.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	

}[/code]

Código do servlet… Os Resultados dos If’s são só para ver o retorno.

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

		String login = request.getParameter("txtLogin");
		String senha = request.getParameter("txtSenha");

		UsuarioDAO dao = new UsuarioDAO();
		List<Usuario> usuarios = dao.obtemUsuario();

		for (Usuario u : usuarios) {
			if (login.equals(u.getLogin()) && senha.equals(u.getSenha())) {
				PrintWriter out = response.getWriter();
				out.println("<html><head><body><h1> DEU CERTO</h1></body></head></html:");
				System.out.println(u.getLogin());
				System.out.println(u.getLogin());

			} else {
				PrintWriter out2 = response.getWriter();
				out2.println("<html><head><body><h1>NAO DEU CERTO</h1></body></head></html:");
			}
		}

	}

Não seria mais fácil algo do tipo:

[code]public boolean isValidLogin(String username, String password) {
// seu código
}

rotected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

    boolean isValid = new UsuarioDAO().isValidLogin(request.getParameter("txtLogin"), request.getParameter("txtSenha"));  

    if (isValid) {  
            PrintWriter out = response.getWriter();  
            out.println("<html><head><body><h1> DEU CERTO</h1></body></head></html:");  
            System.out.println(u.getLogin());  
            System.out.println(u.getLogin());  

   } else {  
            PrintWriter out2 = response.getWriter();  
            out2.println("<html><head><body><h1>NAO DEU CERTO</h1></body></head></html:");  
   }   
} [/code] 

E eu diria para criar uma classe de serviço, algo “intermediário” para lidar com o teu DAO. E no teu servlet tu invoca a classe de serviços que irá trabalhar com a camada do DAO. Vai ficar melhor divido as tarefas dessa forma.

Bom dia joaoabi,

Não consegui entender muito bem sua dúvida mas vi que você não informou o valor do parâmetro da sua instrução SQL “login=?”.

Você precisa informar qual o valor deste parâmetro através de um dos métodos setXXX da classe PreparedStatement, por exemplo:

ps.setString(1, login);

Acredito que você também precisa receber o login do usuário como parâmetro do seu método obtemUsuario.

public List<Usuario> obtemUsuario(String login)

Não seria melhor você buscar o usuário no banco de dados com a seguinte consulta SQL “select * from usuario WHERE login=? and senha=?” e com isso receber ambos os parâmetros (login e senha) no seu método obtemUsuario?

Newton seria sim, mas isso que to fazendo é so titulo de aprendizagem nao
terá aplicação prática futura, por isso que nem to me preocupando muito com
isso!

[quote=joaoabi]Newton seria sim, mas isso que to fazendo é so titulo de aprendizagem nao
terá aplicação prática futura, por isso que nem to me preocupando muito com
isso![/quote]

João, o que quer dizer com “não terá aplicação futura” ?
Que simplesmente esse código não será aplicado a um sistema ou que você não pretende seguir a área de desenvolvimento ?
Se for a segunda opção, ok, se for a primeira…não se começa algo fazendo errado ou se sabe que pode ser melhorado, então melhore. O ideal é sempre buscar começar fazendo o melhor e correto, caso contrário, pode virar costume “deixa o código assim mesmo, funciona”. E esse tipo de pensamento afunda ou atrapalha e muito grandes projetos.

Abraços.

nel,

Vou lembrar disso… estou corrigindo o código agora!
Obrigado pelo toque!