Solucionado (ver solução)
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