Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

não consigo logar no sistema (Bad credentials)

Estou usando o banco de dados MySQL e ao tentar logar no sistema sempre recebo 'Bad credentials' como retorno.

package br.com.makode.makode.config.security;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@EnableWebSecurity
@Configuration
public class SecurityConfigurations extends WebSecurityConfigurerAdapter {
    @Autowired
    private AutenticacaoService autenticacaoService;

    //Cofiguração de autentificação
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(autenticacaoService).passwordEncoder(new BCryptPasswordEncoder());
        }
        //Configuração de autorização
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
            .antMatchers(HttpMethod.GET,"/pessoas").permitAll()
            .antMatchers(HttpMethod.GET,"/pessoas/*").permitAll()
            .anyRequest().authenticated()
            .and().formLogin();
        }
        //Configurações de recursos estaticos(js, css, imagens, etc)
        @Override
        public void configure(WebSecurity web) throws Exception {    
        }
        public static void main(String[] args) {
            System.out.println(new BCryptPasswordEncoder().encode("123456"));
        }
}

package br.com.makode.makode.config.security; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import br.com.makode.makode.model.Usuario; import br.com.makode.makode.repository.UsuarioRepository;

@Service public class AutenticacaoService implements UserDetailsService{

@Autowired
UsuarioRepository repository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    System.out.println("Nome do usuario: " + username);
    Optional<Usuario> usuario = repository.findByDescricao(username);
    System.out.println("Nome do usuario: " + usuario);
    if(usuario.isPresent()) {
        usuario.get();
        System.out.println("usuario get: " + usuario.get().getDescricao());
        System.out.println("usuario get: " + usuario.get().getSenha());
        System.out.println("usuario get: " + usuario.get().getPassword());
    }

      throw new UsernameNotFoundException("Usuario invalido");    
}

}

package br.com.makode.makode.model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

@Entity
public class Usuario implements UserDetails {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String descricao;
    private String usuario;
    private String senha;
    @ManyToMany(fetch = FetchType.EAGER)
    private List<Perfil> perfis = new ArrayList<>();

package br.com.makode.makode.repository;

import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import br.com.makode.makode.model.Usuario;

public interface UsuarioRepository extends JpaRepository<Usuario,Long> {

    Optional<Usuario> findByDescricao(String usuario);
}
4 respostas

Oi,

Verifica no seu banco de dados se na tabela usuario a senha é o hash do BCrypt.

E confere também na sua classe Usuario o método getPassword():

@Override
public String getPassword() {
    return senha;
}

Percebi que na sobrescrita do método loadUserByUsername não há nenhum return.

adicione algo como:

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    System.out.println("Nome do usuario: " + username);
    Optional<Usuario> usuario = repository.findByDescricao(username);
    System.out.println("Nome do usuario: " + usuario);
    if(usuario.isPresent()) {
        usuario.get();
        System.out.println("usuario get: " + usuario.get().getDescricao());
        System.out.println("usuario get: " + usuario.get().getSenha());
        System.out.println("usuario get: " + usuario.get().getPassword());
        return User.builder()
                .username(usuario.get().getDescricao())
                .password(usuario.get().getSenha())
                .build();
    }

      throw new UsernameNotFoundException("Usuario invalido");    
}

Mas estou convencido de que pode não ser isso afinal a IDE reclamaria da falta do return.

solução!

Então o problema é que não está entrando no if do método loadUserByUsername, retonando então a exception UsernameNotFoundException.

Será que nessa sua consulta:

repository.findByDescricao(username);

Não deveria ser pelo atributo usuario ?

repository.findByUsuario(username);

Estou fazendo um projeto aparte utilizando o que aprendi no curso, por isso está dessa forma.

repository.findByDescricao(username);

Como não consegui resolver, adotei a verificação via token. Vou fechar essa pergunta no forum como resolvida. Obrigado a todos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software