Olá desenvolvedores, hoje iremos tratar a validação de login duplicado. Nossa aplicação precisa ter uma validação que verifique se já existe um usuário com o login qual estejamos tentando cadastrar. E neste caso voltamos a questão de segurança no sistema, não recomenda-se permitir que o sistema grave mais de um usuário com o mesmo login. Mas e quanto as senhas elas podem ser iguais? Sim, mas o login deverá ser diferente.
Observe que na servlet usuário.java, que é a responsável pela interceptação dos dados da tela de cadastro de usuário, quando cadastramos um novo usuário podemos salvar ou cancelar a ação. E posteriormente temos ainda a opção de atualizar os dados deste usuário.
Mas note também que, ainda na servlet usuário.java, no método doPost já temos implementado todos os parâmetros sendo passados ao objeto Bean, desse modo a verificação poderá ser feita dentro do Dao – Data Access Object. A classe Dao, como sabemos tem a responsabilidade única de acessar os dados, somente por meio do Dao os dados poderão ser acessados.
E se a classe Dao é a responsável pelo acesso aos dados, faz sentido que a implementação da validação de login seja na classe DaoUsuario.java, onde será retornado true ou false.
IMPLEMENTANDO A VALIDAÇÃO DE LOGIN
O código que precisamos escrever é bem semelhante ao do método consultar(), dessa forma, podemos sem qualquer receio copiar este código e colar abaixo do método. Assim, iremos chamar este novo método que retornará um boolean de validarLogin(), ele receberá o login como parâmetro. Recordando que estamos trabalhando na classe DaoUsuario.java.
Na Query iremos implementar um count(1), onde já existindo o usuário no banco de dados será retornado um, caso contrário, será retornado zero. Assim, retornando zero, ou seja, não existindo no sistema um usuário com o mesmo login, será dado sinal verde para a validação e o usuário poderá ser cadastrado. O count virá acompanhado de um alias – qtd.
O alias (pseudonônimo) é um recurso do SQL para dar um nome a uma tabela ou a uma coluna, neste caso, uma coluna, e é normalmente utilizado com a intenção de simplificar o código. No caso da nossa aplicação será a coluna que receberá a quantidade, e retornará desse modo, zero ou mais. Ou seja, se retornar zero, poderemos prosseguir com o cadastro. E dentro do if, teremos um resultSet que receberá o resultado que será recuperado da coluna qtd. Então, será necessário fazer uma comparação, isto é, se o dado recuperado é maior ou menor que zero. Sendo maior que zero, significa que o login já existe no sistema, e a validação será negada.
Mas não é tudo, voltando a servlet usuário.java, no doPost onde cadastramos o usuário, é preciso passar o objeto de validação. E como há, neste método uma exceção sendo lançada, ao passarmos o objeto de validação, ele deverá estar envolvido por um try/catch, desse modo, mova o try para uma posição acima do if. E como só poderemos atualizar se o id de fato já existir, implantamos tal condição no else.
EM POUCAS PALAVRAS
Sabemos que o login admin ou administrador, são por convenção reservados aos administradores do sistema. Ou seja, não é interessante que um usuário que não tenha privilégio de administrador, possa utilizar estes logins. E como provavelmente eles já estarão no sistema, é importante criar um mecanismo que impeça que eles sejam utilizados por mais de um usuário.
Mas não apenas isso, ter muitos usuários com o mesmo login, pode trazer sérios problemas para a nossa aplicação. Então, é uma boa prática criar logo uma validação que impeça a duplicação de usuários. Mas agora precisamos exibir uma mensagem para o usuário informando o motivo pelo qual ele foi impedido de cadastrar um dado usuário. Então fique ligado no próximo tutorial, por hora, eu fico por aqui.