Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema usando Spring Security/JPA em API

Estou desenvolvendo a parte de autenticação da minha API com Spring Security, mas agora encontrei um problema na hora de dar uma 'role' para o meu usuário.

Tenho duas entidades 'User' e 'Role', a roles seriam por exemplo 'USER' e 'ADMIN' para conseguir administrar as permissões de cada uma nos acessos da API.

Através das minhas classes SecurityConfig, UserPrincipal, CustomUserDetailsService, UserRepository, CreateRoleUserService, CreateUserRoleDTO, UserController eu faço toda essa configuração.

O projeto usa JPA Hibernate e todas as tabelas sobem automaticamente inclusive já fazendo o Join de User e Role criando a outra table users_roles no DB.

Ao cadastrar o novo usuário através da requisição no Insomnia dá tudo certo, e na hora de dar a role aparentemente também.

Mas ao tentar usar as credenciais para realizar uma requisição GET que precisa de autorização ele retorna como se o usuário não existisse, mesmo eu tendo acabado de cadastrar e checar no banco de dados se ele ainda está lá.

java.lang.Error: User does not exists!

É o que retorna, essa mensagem é uma personalizada que criei com a exception "Error' no meu service:

@Service
public class CustomUserDetailsService implements UserDetailsService {


    @Autowired
    UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        User existsUser = userRepository.findByUserNameFetchRoles(username);

        if(existsUser != null) {
            throw new Error("User does not exists!");
        }

        return UserPrincipal.create(existsUser);
    }
}

Link do repositório completo: https://github.com/matthewmatheus/renda-familiar-api

Ao subir só precisa adicionar no banco de dados manualmente o seguinte:


INSERT INTO ROLES(ID, NAME) VALUES(1, 'USER');
INSERT INTO ROLES(ID, NAME) VALUES(2, 'ADMIN');

Pois não consegui configurar ainda para fazer isso automaticamente.

1 resposta
solução!

resolvido


   if(existsUser != null) {
            throw new Error("User does not exists!");
        }

        return UserPrincipal.create(existsUser);
    }
}

para

  if(existsUser == null) {
        throw new Error("User does not exists!");
    } else {
        return UserPrincipal.create(existsUser);
    }
}