Estava com dificuldades em implementar spring security em um projeto pessoal. Mas com o seu vídeo consegui implementar, muito obrigada pelo vídeo! +1 inscrita no seu canal
Não conhecia seu canal, já me inscrevi, sua didática é ótima, muito bacana esse exemplo de projeto, parabéns pelo trabalho, aguardo mais vídeos... muito obrigado.
Rapaz impressionante muito mega top, estou impressionado com tanta qualidade código bem enquadrado na tela tu é fera mesmo obrigado pelo o conteúdo de qualidade😆😆😆
Grande Sebastião! Obrigado pelo seu feedback, fico feliz em saber que te ajudei de alguma forma!🤩 Parabéns por sua jornada nos estudos e conte comigo! 🚀🚀
mestre, tu me fez entender muita coisa nesse simples exemplo. Eu não estava conseguindo entender muito bem sobre AuthorizationPrincipal mas agora estou bem mais esclarecido. Continue com esse trabalho de qualidade.
Showw Roberto, fico feliz que tenha gostado! Geralmente em vídeo aula os professores separam os pacotes por controllers, services e repository, mas na prática os projetos, na maioria das vezes são criados conforme o domínio. Exemplo, no domínio produto tem controller, service e repository assim como no usuário e outros domínios, isso vem da arquitetura limpa. 🙂
Vídeo muito bom, estava com bastante problema com o spring security em meu projeto de TCC e esse vídeo me ajudou muito e até fez parecer fácil, parabéns pela didática e muito sucesso!🎉😅
Obrigado pelo seu feedback! Fico feliz em saber que o conteúdo está sendo útil para você. Continue acompanhando e qualquer dúvida, é só me perguntar. 😊
Showw@@fenryr6844 , a Classe CustomBasicAuthenticationFilter extende da interface OncePerRequestFilter, que essa classe tem o método doFilterInternal que exige a implmentação, por isso que em cima do método tem a notação @Override. O código implementado no método doFilterInternal é executado apenas uma vez por requisição no sistema, onde utilizamos para validar a autenticação, consegui me fazer claro? Qualquer coisa, pode ir me perguntando.
Isso aí, imagine que você tem 30 classes que é domínio e cada uma delas tem um service, serviceImpl e repository... Seria muito difícil visualizar tudo isso se fosse diferente...
Grande João, exatamente, você pode criar sua classe CustomFilter e inserir a lógica do JWT, por que no final é ela que intercepta todas as chamadas e autoriza ou não a requisição. Se tiver mais alguma pergunta, fique à vontade! 🤩
Grande Eliezer, tudo bem? Existe varias formas de fazer isso, a mais fácil é configurar dentro do WebSecurityConfig, pra frente vou trazer mais um vídeo falando sobre. 🙂
Poderia fazer uma versao utilizando o keycloak, consumindo a api do keycloak pra criar usuários e conforme for criando, fazer o controle de um cadastro simples conforme a role de cada um
Interessante, então Neckel, trabalhando com user/password e com as roles eu não precisaria de jwt para realizar as operações no sistema? Neste sentido eu precisaria apenas ter a permissão para o meu usuário no banco de dados e aí eu trabalho com as manipulações de acordo com o "nível de permissão"? Por exemplo, criei meu sistema tenho um user "root" que tem permissão de criar usuários, e aí cria-se um fluxo de criação baseado em permissões, etc
Grande Danrley! O Jwt é muito mais interessante que o basic authentication, vou gravar um video implementando ele... O mais interessante do que foi implementado e é a customização do filter por requisição, nela é validado as permissões de uma forma muito simples. 🙂
Olá Neckel, antes agradeço pelo material, muito bom esse projeto para adquirir aprendizado. Mas eu estou tendo problema de autorização, erro 403, nem a página de login do Spring Security abre, eu cheguei a copiar o seu projeto no github, e ele está rodando, mas gera esse erro. O engraçado é que a configuração habilita o /user/**. Duas pessoas tiveram os mesmo problemas que eu li nos comentários, ambos conseguiram resolver, tentei o mesmo, mas não obtive sucesso. Debuggei o código e não entra na condição do filtro "if(isBasicAuthentication(request))" para verificar se a requisição contém autenticação básica no cabeçalho Authorization. Já coloquei até na versão do seu spring boot, mas creio que isso não seja o motivo do erro, já limpei a cache da minha IDE (VS Code), enfim, tem algo que eu poderia fazer para resolver esse problema, alguma dica. O certo é que não tinha que dar erro, já que o seu projeto rodou, enfim te agradeço se puder me ajudar. Vlw
Olá Daniel, tudo bem? Fico feliz por você estar buscando crescer em conhecimento! 🙂 Faz o seguinte, pode ser algo relacionado ao banco e os registros. Eu criei esse video falando sobre o Flyway onde utilizei o mesmo projeto do Spring Security, com ele é bem mais facil colocar rodar e criar banco com os registros. ruclips.net/video/wCi1eiaE6Mc/видео.html Aí posta aqui o resultado, que vou tentar te ajudar.
@@neckeltech Olá Neckel, valeu pelo feedback. Realmente era relacionado ao banco e aos registros. Eu pensei criar diretamente no banco de dados👍foi nesse momento que reparei que você criou as autorizações (permissões) diretamente no banco e eu tentava fazer no json, talvez fosse por isso que estava gerando erro 403. Por exemplo, eu tentei criar um role ADMIN, além das suas permissões, como por exemplo, PRODUCT_SELECT, mas dava erro de autenticação (403), você apenas atribuía o id do role no json (postman) e não o name. Enfim, não tinha entendido a lógica. Pergunta: Mas no seu exemplo de projeto é possível criar outro tipo de role pelo json ou somente pelo banco? Pois se é possível criar outros tipos de role diretamente pelo json, então eu ainda preciso verificar o que está dando errado. Valeu pelo projeto foi bem legal e serviu como aprendizado 👍ganhou mais um inscrito
apos criar o usuario quando vc faz uma requisição com post /product no postman vc coloca alguma coisa na basic auth ? eu clonei o seu repositorio e configurei o banco de dados e coloquei um usuario e senha na basic auth e aparece 401 unathourized
Grande Fernando, debuga a classe CustomBasicAuthenticationFilter, nela você vai conseguir verificar se está chegando usuário e senha e se está montando a autenticação corretamente.
Engraçado. Fiz junto e coloco um usuário e senha e dá retorno 403 Forbidden. Depois subi seu cógio em outra projeto do GIT só trocando a senha do banco e contínua dando 403 Forbidden. Se eu troco o usuário a senha eé mostra que o usuário é invalido ou a senha. Não entendi
Grande Ricardo! Faz o seguinte, pega o projeto no github e compara com o seu. Pode ter um detalhe diferente... Você também pode debugar para verificar se encontra o user e as roles... Se puder deixar público seu projeto, comenta com o link que aí eu verifico...
@@neckeltech ainda agora tive o erro parecido, eu resolvi quando removi o "/**" la na security config, acho que isso se deve ao spring 3.1.5 ou superior ter alterado umas syntax. Eu to usando a 3.1.7 por exemplo
Me tira uma dúvida, dentro da classe de config, eu posso substituir essa classe criada "customAuthenticationFilter" por "UsernamePasswordAuthenticationFilter" e ai nao precisarei criar toda a classe na mao, certo?
A ideia de criar uma classe custom com código feito na mão é para você ter controle total da autenticação e autorização das requisições... Não seria só alterar para UsernamePassword... Mas é possível sim utilizar o que tem pronto do Sprint Security e diminuir código, mas aí perde um pouco do controle, como comentei...
@@neckeltech é que estou começando agora no spring security, e me perco nesse monte de classes, queria implementar algo básico (usuario e senha) o mais simples possivel e depois ir subindo o nível rsrs
@@mateusfonseca988 Vai por mim nesse formato é possível entender todas as etapas da autenticação e autorização... Pode ir perguntando que quando puder te responder te retorno por aqui 🙂
Estava com dificuldades em implementar spring security em um projeto pessoal. Mas com o seu vídeo consegui implementar, muito obrigada pelo vídeo!
+1 inscrita no seu canal
Grande Amanda, obrigado pelo feedback, fico feliz por ter ajudado! 🙂
melhor video de spring security que eu vi, e eu vi vários! parabéns, continue com os vídeos. +1 inscrito
Grande Vinícius! Fico muito feliz com seu feedback! Vai ter muitos vídeos assim esse ano... 🤩
Parabéns, linguagem simples e direta. Isso aí.
Top Diego, obrigado pelo feedback! 🙂
Não conhecia seu canal, já me inscrevi, sua didática é ótima, muito bacana esse exemplo de projeto, parabéns pelo trabalho, aguardo mais vídeos... muito obrigado.
Grande Hamilton! Obrigado pelo feedback! 😍 Vou continuar sim postando, buscando sempre me fazer compreendido, esse é o sonho... hehe
O melhor video sobre o spring security, passo a passo, sensacional, seu canal esta aqui como minha mentoria sobre java, parabens
Grande Marcio!
Fico muito feliz com seu feedback!
Esse ano terá grandes vídeos e espero ajudar ainda mais! 🤩
Rapaz impressionante muito mega top, estou impressionado com tanta qualidade código bem enquadrado na tela tu é fera mesmo obrigado pelo o conteúdo de qualidade😆😆😆
Grande Sebastião! Obrigado pelo seu feedback, fico feliz em saber que te ajudei de alguma forma!🤩
Parabéns por sua jornada nos estudos e conte comigo! 🚀🚀
Muito bom, parabéns! Continue criando conteúdos!
mestre, tu me fez entender muita coisa nesse simples exemplo. Eu não estava conseguindo entender muito bem sobre AuthorizationPrincipal mas agora estou bem mais esclarecido. Continue com esse trabalho de qualidade.
Grande Lemuel! Muito obrigado pelo seu feedback, fico feliz em saber que o video te ajudou! ☺
Meu amigo, por gentileza, continue com os videos! Achei muito bacana e simples os passo a passos!
Grande Mateus, obrigado pelo seu feedback, fico muito feliz em saber que estou ajudando! 🤩
ótimo vídeo!!
Obrigado Rafaela! 😊
Estou vendo a aula, só bugando um pouco com a estrutura de pacotes realizada, Conteúdo muito necessário, obrigado professor.
Showw Roberto, fico feliz que tenha gostado! Geralmente em vídeo aula os professores separam os pacotes por controllers, services e repository, mas na prática os projetos, na maioria das vezes são criados conforme o domínio. Exemplo, no domínio produto tem controller, service e repository assim como no usuário e outros domínios, isso vem da arquitetura limpa. 🙂
Vídeo muito bom, estava com bastante problema com o spring security em meu projeto de TCC e esse vídeo me ajudou muito e até fez parecer fácil, parabéns pela didática e muito sucesso!🎉😅
Fica a sugestão de video conectando com um front end com angular ou react e também algum vídeo sobre tokens JWT...
Showw @lecklis, fico feliz em saber que te ajudou! 🤩
Vou incluir sim na lista um projeto utilizando JWT para ser um dos próximos videos... 🤩
Obrigado pelo conteúdo..ajuda muito...
Obrigado pelo seu feedback! Fico feliz em saber que o conteúdo está sendo útil para você. Continue acompanhando e qualquer dúvida, é só me perguntar. 😊
Muito boa aula professor, vlw , fiquei com um pouco de dificuldade pra entender os metodos da classe CustomBasicAthentication apenas
Showw @fenryr6844, fico feliz que gostou do conteúdo! Se puder comentar aqui quais métodos você ficou com dúvida, eu te respondo. 🙂
@@neckeltech Classe doFilterInternal, não entendi , do que ela se trata ? qual e a função dela professor
Showw@@fenryr6844 , a Classe CustomBasicAuthenticationFilter extende da interface OncePerRequestFilter, que essa classe tem o método doFilterInternal que exige a implmentação, por isso que em cima do método tem a notação @Override. O código implementado no método doFilterInternal é executado apenas uma vez por requisição no sistema, onde utilizamos para validar a autenticação, consegui me fazer claro? Qualquer coisa, pode ir me perguntando.
@@neckeltech ah sim, entendi
Vi alguns videos de tutores fazerndo o metodo new BCryptPasswordEncoder dentro da classe config...
É possível também... Nesse vídeo eu fiz uma classe separada para isolar a autenticação do tipo basic, por isso ficou ali
Esse modelo de separação dos pacotes (tudo que é de user fica no pacote user) eu gostei.
Isso aí, imagine que você tem 30 classes que é domínio e cada uma delas tem um service, serviceImpl e repository... Seria muito difícil visualizar tudo isso se fosse diferente...
Olá! Excelente aula. Uma dúvida, se eu quisesse usar JWT ao invés do basic, eu poderia usar a mesma lógica da classe CustomBasicAuthenticationFilter ?
Grande João, exatamente, você pode criar sua classe CustomFilter e inserir a lógica do JWT, por que no final é ela que intercepta todas as chamadas e autoriza ou não a requisição.
Se tiver mais alguma pergunta, fique à vontade! 🤩
e se eu quisesse fazer com que o usuário, possa acessar a rota de obter os produtos, sem necessidade de autenticação?
Grande Eliezer, tudo bem?
Existe varias formas de fazer isso, a mais fácil é configurar dentro do WebSecurityConfig, pra frente vou trazer mais um vídeo falando sobre. 🙂
@@neckeltech obg, eu achei lá mesmo, foi só adicionar um permit() pra rota desejada
Poderia fazer uma versao utilizando o keycloak, consumindo a api do keycloak pra criar usuários e conforme for criando, fazer o controle de um cadastro simples conforme a role de cada um
Perfeito Gabriel, gostei da idéia! 😀
Entra na lista de sugestões! 🎯
Obrigado por compartilhar!
Interessante, então Neckel, trabalhando com user/password e com as roles eu não precisaria de jwt para realizar as operações no sistema? Neste sentido eu precisaria apenas ter a permissão para o meu usuário no banco de dados e aí eu trabalho com as manipulações de acordo com o "nível de permissão"?
Por exemplo, criei meu sistema tenho um user "root" que tem permissão de criar usuários, e aí cria-se um fluxo de criação baseado em permissões, etc
Grande Danrley!
O Jwt é muito mais interessante que o basic authentication, vou gravar um video implementando ele... O mais interessante do que foi implementado e é a customização do filter por requisição, nela é validado as permissões de uma forma muito simples. 🙂
se tem uma coisa que me enrrola é o Spring Security xD
vou caçar um livro focado só nele pq o bixim complicado rs
Olá Neckel, antes agradeço pelo material, muito bom esse projeto para adquirir aprendizado. Mas eu estou tendo problema de autorização, erro 403, nem a página de login do Spring Security abre, eu cheguei a copiar o seu projeto no github, e ele está rodando, mas gera esse erro. O engraçado é que a configuração habilita o /user/**. Duas pessoas tiveram os mesmo problemas que eu li nos comentários, ambos conseguiram resolver, tentei o mesmo, mas não obtive sucesso. Debuggei o código e não entra na condição do filtro "if(isBasicAuthentication(request))" para verificar se a requisição contém autenticação básica no cabeçalho Authorization. Já coloquei até na versão do seu spring boot, mas creio que isso não seja o motivo do erro, já limpei a cache da minha IDE (VS Code), enfim, tem algo que eu poderia fazer para resolver esse problema, alguma dica. O certo é que não tinha que dar erro, já que o seu projeto rodou, enfim te agradeço se puder me ajudar. Vlw
Olá Daniel, tudo bem? Fico feliz por você estar buscando crescer em conhecimento! 🙂
Faz o seguinte, pode ser algo relacionado ao banco e os registros. Eu criei esse video falando sobre o Flyway onde utilizei o mesmo projeto do Spring Security, com ele é bem mais facil colocar rodar e criar banco com os registros.
ruclips.net/video/wCi1eiaE6Mc/видео.html
Aí posta aqui o resultado, que vou tentar te ajudar.
@@neckeltech Olá Neckel, valeu pelo feedback. Realmente era relacionado ao banco e aos registros. Eu pensei criar diretamente no banco de dados👍foi nesse momento que reparei que você criou as autorizações (permissões) diretamente no banco e eu tentava fazer no json, talvez fosse por isso que estava gerando erro 403. Por exemplo, eu tentei criar um role ADMIN, além das suas permissões, como por exemplo, PRODUCT_SELECT, mas dava erro de autenticação (403), você apenas atribuía o id do role no json (postman) e não o name. Enfim, não tinha entendido a lógica. Pergunta: Mas no seu exemplo de projeto é possível criar outro tipo de role pelo json ou somente pelo banco? Pois se é possível criar outros tipos de role diretamente pelo json, então eu ainda preciso verificar o que está dando errado. Valeu pelo projeto foi bem legal e serviu como aprendizado 👍ganhou mais um inscrito
Como faço pra obter o usuário logado?
apos criar o usuario quando vc faz uma requisição com post /product no postman vc coloca alguma coisa na basic auth ? eu clonei o seu repositorio e configurei o banco de dados e coloquei um usuario e senha na basic auth e aparece 401 unathourized
Grande Fernando, debuga a classe CustomBasicAuthenticationFilter, nela você vai conseguir verificar se está chegando usuário e senha e se está montando a autenticação corretamente.
Engraçado. Fiz junto e coloco um usuário e senha e dá retorno 403 Forbidden. Depois subi seu cógio em outra projeto do GIT só trocando a senha do banco e contínua dando 403 Forbidden. Se eu troco o usuário a senha eé mostra que o usuário é invalido ou a senha. Não entendi
Grande Ricardo! Faz o seguinte, pega o projeto no github e compara com o seu. Pode ter um detalhe diferente... Você também pode debugar para verificar se encontra o user e as roles...
Se puder deixar público seu projeto, comenta com o link que aí eu verifico...
@@neckeltech ainda agora tive o erro parecido, eu resolvi quando removi o "/**" la na security config, acho que isso se deve ao spring 3.1.5 ou superior ter alterado umas syntax. Eu to usando a 3.1.7 por exemplo
Me tira uma dúvida, dentro da classe de config, eu posso substituir essa classe criada "customAuthenticationFilter" por "UsernamePasswordAuthenticationFilter" e ai nao precisarei criar toda a classe na mao, certo?
A ideia de criar uma classe custom com código feito na mão é para você ter controle total da autenticação e autorização das requisições... Não seria só alterar para UsernamePassword...
Mas é possível sim utilizar o que tem pronto do Sprint Security e diminuir código, mas aí perde um pouco do controle, como comentei...
@@neckeltech é que estou começando agora no spring security, e me perco nesse monte de classes, queria implementar algo básico (usuario e senha) o mais simples possivel e depois ir subindo o nível rsrs
@@mateusfonseca988 Vai por mim nesse formato é possível entender todas as etapas da autenticação e autorização... Pode ir perguntando que quando puder te responder te retorno por aqui 🙂
usando esses padrões mais novos de security, seguindo tudo certinho ainda recebo 401 da até raiva
Grande Vinícius, se for um projeto de estudo e se puder subir no github eu posso dar uma olhada para você. 🎯👊
@@neckeltech Adoraria mano!