1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

JPA + senha md5

Pessoal, eu cadastrei alguns usuários no banco de dados e usei criptografia do tipo MD5 na senha. Eu estava usando tudo normal, pois fazia isso com o spring security, eu fazia o cadastro direto no banco de dados, e para fazer o login o spring security fazia a comparação para mim. Mas, agora que preciso usar um método de autenticação eu preciso buscar no banco o usuário por login e senha, mas, não estou conseguindo. O erro está apontando para o método do meu DAO que faz a busca no banco. Segue logo abaixo:

@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.SERIALIZABLE, readOnly=true)
    @Override
    public Usuario getUsuario(String login, String senha) {
        CriteriaBuilder builder = em.getCriteriaBuilder();
        CriteriaQuery<Usuario> criteriaQuery = builder.createQuery(Usuario.class);
        Root<Usuario> a = criteriaQuery.from(Usuario.class);
        criteriaQuery.select(a);

        List<Predicate> predicates = new ArrayList<>();


        ParameterExpression<String> log = builder.parameter(String.class, "login");
        ParameterExpression<String> sen = builder.parameter(String.class, "senha");
        predicates.add(builder.equal(a.get("login"), log));
        predicates.add(builder.equal(a.get("senha"), sen));
        criteriaQuery.where(predicates.toArray(new Predicate[0]));

        TypedQuery<Usuario> query = em.createQuery(criteriaQuery);
        query.setParameter("login", login);
        query.setParameter("senha", DigestUtils.md5(senha));
        Usuario usuarios = query.getSingleResult();
        System.out.println("Login e senha: " + usuarios.getLogin() + "  -" + usuarios.getSenha());
        return usuarios;
    }

Eu tentei usando o criteria, mas também usando JPQL, segue abaixo:

@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.SERIALIZABLE, readOnly=true)
    @Override
    public Usuario getUsuario(String login, String senha) {
        String jpql = "Select a from Usuario a where a.login = :login and a.senha = :senha";
        TypedQuery<Usuario> query = em.createQuery(jpql, Usuario.class);
        query.setParameter("login", login);
        query.setParameter("senha", DigestUtils.md5(senha));
        Usuario usuarios = query.getSingleResult();
        System.out.println("Login e senha: " + usuarios.getLogin() + "  -" + usuarios.getSenha());
        return usuarios;
    }

Eu chamo na minha classe esse método da seguinte maneira:

Usuario user = getUsuarioDao().getUsuario(username, senha);

Eu não consigo fazer esse código rodar. Sempre dar erro. Por favor ajudem. Obs,: Eu testei esse mesmo método no meu controller, ou seja, em outro lugar e ele retorna um usuário normalmente, com o detalhe de que a senha vem encriptografada, então esse método do meu dão só não roda nessa classe do AutenticationProvider do spring security.

Segue abaixo o erro apresentado no console:

Fev 26, 2015 3:21:09 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-bio-8080"]
Fev 26, 2015 3:21:09 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-bio-8009"]
Fev 26, 2015 3:21:09 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 33415 ms
Fev 26, 2015 3:21:30 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [appServlet] in context with path [/igreja] threw exception
java.lang.NullPointerException
    at br.com.igreja.security.SFAuthenticationProvider.authenticate(SFAuthenticationProvider.java:31)
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:177)
    at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:211)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
  • qual erro? posta o erro aí

    Janerson Douglas   26 de fev de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags spring-mvc spring-security spring jpa criptografia hibernate java java-ee ou faça a sua própria pergunta.