Estou tentando validar se um e-mail existe no banco antes de cadastrá-lo, mas estou tendo dificuldade. Já tentei de algumas formas, mas todas sem resultado. Gostaria de algumas dicas. Seguem aqui as classes:
package br.com.casadocodigo.loja.validation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import br.com.casadocodigo.loja.dao.UsuarioDAO;
import br.com.casadocodigo.loja.models.Usuario;
public class UsuarioValidation implements Validator {
@Autowired
private UsuarioDAO dao;
@Override
public boolean supports(Class<?> clazz) {
return Usuario.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "nome", "field.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "field.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "senha", "field.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "senhaConfirma", "field.required");
Usuario usuario = (Usuario) target;
if (!(usuario.getSenha().equals(usuario.getSenhaConfirma()))) {
errors.rejectValue("senha", "notmatch.senha");
}
if (usuario.getSenha().length() < 5) {
errors.rejectValue("senha", "shortpassword.senha");
}
boolean existe = dao.loadUserByUsername(usuario.getEmail()) != null;
if (existe) {
errors.rejectValue("email", "emailusado.email");
}
}
}
package br.com.casadocodigo.loja.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Repository;
import br.com.casadocodigo.loja.models.Usuario;
@Repository
public class UsuarioDAO implements UserDetailsService {
@PersistenceContext
private EntityManager manager;
public Usuario loadUserByUsername(String email) {
List<Usuario> usuarios = manager.createQuery("select u from Usuario u where email = :email", Usuario.class)
.setParameter("email", email).getResultList();
if (usuarios.isEmpty()) {
throw new UsernameNotFoundException("Usuario " + email + " não foi encontrado");
}
return usuarios.get(0);
}
public void gravar(Usuario usuario) {
manager.persist(usuario);
}
public List<Usuario> listar() {
return manager.createQuery("select distinct(u) from Usuario u", Usuario.class).getResultList();
}
}