Classe para login!

7 respostas
M

Pessoal

Estou fazendo uma classe para fazer login no meu programa, mas estou achando ela meio ou completamente amadora…rs gostária da opinião de voces de como posso fazer isso de uma forma mais elegante!!!

abaixo segue minha classe

Connection conn = null;
        String teste = "SELECT login, password FROM testeJava where nome = ?, and password = ? ;";
  
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection( "jdbc:mysql://localhost/teste","marcelo","senha");
            System.out.println("A conexãfoi um sucesso\n");  
            PreparedStatement stm = conn.prepareStatement(teste);
            stm.setString(1, "marcelo");
            stm.setString(1, "P@ss0rd");
             ResultSet rs = stm.executeQuery();
           while (rs.next()) {
                String nome  = rs.getString("login");
                String senha = rs.getString("password");
                if((login.equalsIgnoreCase(nome) && (password.equalsIgnoreCase(senha)) {
                    return true;
                }
            }
            return false;

7 Respostas

victor.godinho

Olá Marcelo Gomes,

O que está faltando em sua classe é na verdade outras classes (rsrs), pois em um único método está sendo feita a conexão, tratamento e controle…

Creio que seria interessante fazer uma classe para se conectar com o DataBase (unicamente), outro classe para realizar o controle de informações entre a DAO (classe que se conecta com a base-de-dados) e a interface, e ao invés de colocar a query “embutida” no código, talvez buscar ela atraves de um xml, yaml, txt ou qualquer outra coisa que esteja em um arquivo externo, para que não necessite de recompilação caso mude por exemplo o nome de uma coluna, o mesmo serve para a conexão com a base-de-dados (colocar as informações de conexão em um xml). Ou seja, implantar um MVC bem básico.

Não coloquei nenhum código aqui porque estou meio sem tempo, e esta forma não é a mais avançada de se fazer um controle de login, mas com isto você já vai deixar seu código muito mais enxuto e caso precise de ajuda na elaboração do código, é só dizer.

Ah, e eu não entendi o porque de checar o login e senha vindos do banco de dados no Java, isto seria contra o SQL Injection? Caso seja, há outras formas em minha opinião mais eficazes de se prevenir.

Abraços!!

erickcellani

concordo com o victor…
e tbm axo que seria legal fazer uma criptografia dessa senha ai neh… (em outra classe tbm!)…

KWill

Se você está usando banco de dados relacional SQL, também acho interessante adicionar uma camada ou classe de segurança para prevenir ataques de SQL Injection, que são executados em muitos sistemas web por aí.

Link para um fórum de segurança:
http://www.istf.com.br/vb/showthread.php?t=5207

Inté.

fsquadro

Marcelo,

Eu também concordo, que o que está faltando é você separar o que você fez em algumas classes e criptografar a senha.
Vou deixar aqui uma classe simples que implementa MD5 para você dar uma analisada.

public class EncriptaSenha {
     
     /** Creates a new instance of EncriptaSenha */
     public EncriptaSenha() {        
     }
     
      public static String encripta (String senha) {
          try    {
              MessageDigest digest = MessageDigest.getInstance("MD5");
              digest.update(senha.getBytes());
              BASE64Encoder encoder = new BASE64Encoder (); 
              return encoder.encode(digest.digest()); 
          }catch (NoSuchAlgorithmException ns) {
              ns.printStackTrace ();
              return senha;
          }
      }    
     
 }

Boa sorte.

M

Obrigado pessoal, vou tentar fazer desta forma, com varias classes e arquivos…

Ah! eu fiz assim pq num sei fazer de outra forma…rs eh o primeiro software que estou tentando fazer em java.

Abraco,

Marcelo Gomes

M

Pessoal,

Seguindo a orientacao, estou tentando separa as classes… estou iniciando pelo banco.

Fiz uma classe que recebe todos os parametos do banco mais o comando sql, a minha duvida é depois de executar o sql o que devo retoranar ???

Tentei retorar o ResultSet, mas não consigo ver os dados nele depois !!!

Obrigado,

Marcelo Gomes

erickcellani

vc tem que retornar oq vc ker usar!! se vc estiver fazendo metodo que faz um update por exemplo ele naum teria retorno certo??

a estrutura que eu sigo é a seguinte…

tem um pacote chamdo DAO
dento dele… tenho mais dois pacotes…
implementacao
interfaces

no implementacao… claro… faço classes de implementações…
exemplo:
uma classe responsável pelos dados do usuário… (vou chama-la de UserImpl)
dentro dessa classe terá os select’s, insert’s e update’s da vida…
a classe deve ser declarada dessa maneira:

public class UserImpl implements UserDao

no interfaces… faço interfaces para chamar as implementações…
exemplo:
uma interface responsável pelas implementações dos dados do usuário… (vou chama-la de UserDao)
dentro dessa interface terá a assinatura do método da implementação…
a interface terá todas as assinaturas dos metodos da implementação
a interface deve ser declarada dessa maneira:

public interface UserDao

espero ter ajudado!

Criado 2 de maio de 2007
Ultima resposta 3 de mai. de 2007
Respostas 7
Participantes 5