[quote=diegocharles]Pessoal, estou iniciando um sistema em Java, e estou com uma dúvida em relação a OO:
– Eu estou fazendo um módulo de Usuarios que acessarao o sistema, entao obvimente, preciso de um método autentica() (usei esse nome no meu projeto). Esse método compara o que foi digitado pelo usuário, com o devido registro no BD. Agora vem a dúvida, eu devo criar esse método dentro do meu UsuarioDao (Persistencia), ou dentro de Usuario (Entidade) ?
[/quote]
Nenhum dos dois. “obviamente preciso de um método autentica” é otima.
Autenticação é um processo. Vc precisa das credenciais do usuário ( nome, password ) e precisa que alguem faça a verificação.
Esse alguem não pode ser o usuário. O usuário não pode se auto-autenticar. Isso é absurdo.
A autenticação não é um processo ligado a banco de dados. (pode ser, e no seu caso é, mas no caso geral não é) , logo o DAO não tem nada a haver com isso.
O que vc precisa é de um serviço de autenticação que verifica que o usuário tem aquelas credenciais.
Como o serviço faz essa identificação é um detalhe de implementação, mas o serviço tem que ser algo separado do usuario e do dao.
interface AutenticationService {
public void autenticate(String userName, Set<Credencials> credentials) throws AutenticationException;
}
class DB AutenticationService implements AutenticationService {
public void autenticate(String userName, Set<Credencials> credentials) throws AutenticationException{
// procura no banco pelo usario com o nome userName
// se não existe lance UserNotFoundAutenticationException que é subclasse de AutenticationException
// para cada credenctial :
// se a credencial é uma Credential De Password verifica se o usuário tem aquela password e ela é válida ( não experirou, etc..)
// se não foi encontrado lance CredentialNotFoundAutenticationException , se é invalida InvalidCredentialAutenticationException
// se tudo correu bem simplesmente não faça nada
}
}
Se a autenticação é correta o método simplesmente passa. Se não ele lança exceção.
É comum que este método retorna o usuário do banco, ma isso deve ser feito com cuidado.
Apenas se o usuário é válido ele pode ser autenticado.
Outras operações durante a autenticação consistem em autorgar permissões ao usuário conforme a autenticação.
Por exemplo se o usuário forneceu a super-password ele tem permissões especiais. Se forneceu apenas a password normal tem permissões limitadas. Se forneceu as duas, tem todas as pemrissões