Controle de Acesso com Servlets

5 respostas
joaoabi

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

//classe usuárioDAO
public List<Usuario> obtemUsuario() {
		try {
			List<Usuario> usuarios = new ArrayList<Usuario>();
			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);
			}
		}
		

	}
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:");
			}
		}

	}

5 Respostas

nel

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

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:");  
       }   
    }

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.

Newton_Angelini

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?

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!

nel

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!

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.

joaoabi

nel,

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

Criado 30 de maio de 2012
Ultima resposta 4 de jun. de 2012
Respostas 5
Participantes 3