Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

[Bug] problema com o AuthenticationManager y/o Repositorio

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationManager' defined in class path resource [med/Vol/api/infra/seguridad/ConfiguracionesSeguridad.class]: Failed to instantiate [org.springframework.security.authentication.AuthenticationManager]: Factory method 'authenticationManager' threw exception with message: Error creating bean with name 'servicioAutenticacion': Unsatisfied dependency expressed through field 'repositorio': Error creating bean with name 'usuarioRepositorio' defined in med.Vol.api.dominio.usuarios.UsuarioRepositorio defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.security.core.userdetails.UserDetails med.Vol.api.dominio.usuarios.UsuarioRepositorio.encuentrPorAcesso(java.lang.String); Reason: Failed to create query for method public abstract org.springframework.security.core.userdetails.UserDetails med.Vol.api.dominio.usuarios.UsuarioRepositorio.encuentrPorAcesso(java.lang.String); No property 'encuentrPorAcesso' found for type 'Usuario' Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

diz que o erro esta no Repository.. so que nao sei a onde?

11 respostas

Oi!

Na interface UsuarioRepositorio o método precisa ter o nome em inglês:

UserDetails findByLogin(String username);
solução!

Olá, Angela!

Para usar derived queries, essas consultas criadas automaticamente pelo Spring Data JPA, é necessário seguir um padrão de nomenclatura. O padrão se dá pelo prefixo "findBy" e em seguida os atributos desejados. Os nomes dos atributos devem ser iguais ao definidos na entidade, apenas mudando a formatação para camelCase.

Por exemplo:

public class Usuario {

 private String nome;
 
 ...

A derived query para buscar um usuário por nome será:

Usuario findByNome(String nome);

Então, no seu repository, você precisará definir um método para atender a sua necessidade seguindo essa nomenclatura. Segue documentação das derived queries

Sigo a disposição para ajudar!

obrigado, assim como o nome do metodo tambem tive que alterar os recursos para Ingles.. ai compilou!

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeagora como pode ver.. eu adicionei dois usuários, tanto ana como gregorio.. so que no insonia conrinua respondendo com o erro 403

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidademas nao entendo porque nao me brinda o acceso.. Insira aqui a descrição dessa imagem para ajudar na acessibilidadepublic class Usuario implements UserDetails {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String login;
private String password;

@Override
public Collection<? extends GrantedAuthority> getAuthorities() { 
    return List.of(new SimpleGrantedAuthority("ROLE_USER")); 
}

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

@Override
public String getUsername() {
    return login    ;
}

@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return true;
}

}

tudo copila, mas nao funsiona

Oi!

Você inseriu a senha do usuário gregorio como 123456 no banco de dados, ao invés de inserir o hash BCrypt dessa senha.

No insert do usuario ana.souza@voll.med a senha foi inserida corretamente no banco de dados

E na classe SecurityConfigurations precisa liberar acesso para a url /login

obrigada por responder Rodrigo, mas ja coloqui o "/login" nessa clase Insira aqui a descrição dessa imagem para ajudar na acessibilidade

e coloquie esse 2do usuario gregorio (e sua senha basica)para saber se foi que coloquei a opção da codificação pelo BCrypt de forma correta, e nem mesmo assim consegue ler a senha desse usuário

Consegue compartilhar o seu projeto?

Tem alguns problemas no seu projeto.

Na migration V4__alteral-tabla-medicos-adicionar-columna-activo:

alter table Medicos add activo tinyint;
update medicos set activo = 1;

O update está com o nome da tabela com a letra m (minúsculo). O correto:

alter table Medicos add activo tinyint;
update Medicos set activo = 1;

A mesma coisa na migration V6__alteral-tabla-pacientes-adicionar-columna-activo:

alter table Pacientes add activo tinyint;
update pacientes set activo = 1;

Altere para:

alter table Pacientes add activo tinyint;
update Pacientes set activo = 1;

Na sua migration V5__crea-tabla-usuarios os nomes das colunas:

create table Usuarios(

    id bigint not null auto_increment,
    acceso varchar(100) not null,
    contrasena varchar(255) not null unique,

    primary key(id)
);

Estão diferentes dos nomes dos atributos na entidade Usuario:

public class Usuario implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String login;
    private String password;

Altere a entidade para:

public class Usuario implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(name = "acceso")
    private String login;
    
    @Column(name = "contrasena")
    private String password;

Nas suas migrations você colocou as tabelas com a primeira letra em maiúsculo. Para que isso funcione precisa adicionar essa propriedade no application.properties:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Wow.. ja fiz os cambios e é muito util saber como poder trocar de nome com esse @Column.. só que nao esta adicionado novos usuarios o InsomniaInsira aqui a descrição dessa imagem para ajudar na acessibilidade

fala que nao estaticei algum recurso.. so que comparei com Pacientes e Medicos(corre normal) e nao achei o erro Insira aqui a descrição dessa imagem para ajudar na acessibilidade

https://github.com/Dondavid39/registro-medicos-usuarios-pacientes.git