Mano do céu, gastei dois dias para entender, o funcionamento do JWT Kara parece que foi um estralo, na minha cabeça quando entendi, nossa o sabor da vitória e maravilhoso, e por isso que falo programação não precisa nascer com dom , isso se chama persistência e dedicação amor a profissão, acho que chamo isso de curiosidade, acho que talento e outra coisa quem nasce com uma voz linda para cantar, para ser locutor, um talento para jogador isso e dom , agora profissão e dedicação claro que tem gente com maís facilidade de aprendizado, mas isso não tira o mérito de quem que se dedicar show de maia seus vídeos parabéns ❤❤❤❤❤
Aula muito boa Rodrigo, fiquei preso 2 dias ainda na mesma aula porquê eu tinha me esquecido de colocar o @Autowired do AuthenticationManager. Conteúdo muito bom!
me salvou essa aula, meu muito obrigado. Tô fazendo um curso porém a versão que ele usa o spring e a dependencia jwt é bem antiga. Procurei várias coisas e não achei nada. Mas esssa aula salvou mesmo. Consegui ver meu token gerado.
Rodrigo uma duvida. Não sei se tinha outro video a respeito da criação de usuario, mas eu estou vendo esse video seu como se fosse o primeiro. Na minha api eu ja crio o usuario usando BCrypt de uma forma. Esse outro bean do BCrypt funciona com ele? E outra duvida, qual a magica que faz com que vc passando um usuario e senha ele consulta pelo username, mas acho que faz a comparação com a senha, é isso que faz no código né? Não consegui entender em qual parte isso acontece, ja que aparentemente no código não aparece
Então, eu acabei criando gerando a senha por um site e salvando no banco de dados direto, mas da pra fazer pelo codigo também. Eu vou criar um video parte 5 explicando essa parte de criar usuários, senha e mostrar algumas coisas em relação a isso que eu vi que gerou duvida na galera. Então para ele comparar a senha eu utilizo esse metodo (github.com/Rodsafreitas/security-jwt/blob/master/src/main/java/br/com/spring/security/security/service/AuthenticationService.java): @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { return usuarioRepository.findByLogin(username); } e ele pega o usuario com base no username que eu passei e vai devolver ele completo, ali ele devolve um UserDetails que é uma implementação que minha classe Usuario faz e como eu to devolvendo o usuario que tem aquele username ele vai pegar o objeto todo e dar um get na senha dele e fazer uma comparação com a que eu to passando. Esse processo da comparação é feito somente eu criando uma classe e implementando esse metodo e o spring se encarrega de fazer toda essa parte, eu só preciso devolver uma classe que implementa o UserDetails.
Rodrigo, tudo bem. Estou desenvolvendo um sistema com Spring Boot e Spring Security. Não gostaria de usar um front-end muito complexo. Estou tentando usar o Thymeleaf. Como fazer isso usando o JWT, é possível? Como incluir o Token em todas as requisições?
opa, tudo bem e voce? da sim, da pra trabalhar com isso utilizando o js junto. Eu vou fazer um video mostrando como trabalhar com esse jwt do lado do front-end
Só pra mim entender, esse parte ".withIssuer("PRODUTOS")" nos minutos 6:52 seria pq o seu microserviço é de produtos certo? No caso o meu seria de empresas então eu colocaria "EMPRESAS"? Não vi o projeto desde o começo, estou vendo somente a parte de implementar a autenticação e fiquei com essa duvida. Obrigada. Adoro seus videos.
Muito bom o conteúdo, porém tive uma certa dificuldade inicial configurando as dependências, porém depois de uns minutos consegui. Seria interessante colocar no começo do video quais dependências vão ser utilizadas
opa mano, valeu! beleza, vou mostrar no começo do video mas também tem aqui o projeto no github caso precise: github.com/Rodsafreitas/security-jwt/tree/master
opa! sim, aqui:to com essas aqui implementation 'com.auth0:java-jwt:4.2.1' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' runtimeOnly 'com.mysql:mysql-connector-j' tem o codigo no github também caso precise: github.com/Rodsafreitas/security-jwt/tree/master
só tive um problema, no vídeo você já possui um usuário cadastrado no banco de dados, que já possui o token porém no vídeo você não mostra como foi inserido... não consegui testar a rota /login por isso, mas gostei bastante do video.
Tive que fazer algumas mudanças na classe Configuration, pois você usou alguns recursos removidos no Spring Security 6, seria legal você fazer uma atualização no projeto!
Opa! Daria para eu fazer a autenticação sem o uso de uma senha, ou seja, somente com o e-mail? **Explicação:** Em um sistema qualquer, um usuário solicitará a criação de uma conta. Um dos dados inseridos será o e-mail. O administrador do sistema validará o cadastro desse usuário, trocando o status de false para true. Em seguida, o usuário receberá um e-mail que sua conta foi cadastrada. Em seguida, o usuário poderá se logar com a conta do Google usando o mesmo e-mail que foi enviado ao administrador. Veja o passo a passo: - O Frontend faz uma solicitação de login ao Google; - O Google disponibiliza um token com o e-mail ao Frontend; - O Frontend envia esse email para o Backend; - O Backend verifica se o e-mail já existe no Banco de Dados; - Caso o e-mail exista, é criado um token de autorização que permite o Frontend fazer conexão com o Backend.
Ótimo vídeo, mas estou com erro na classe Configurations, não consigo usaor o antMatchers parece a mensagem: Cannot resolve method 'antMatchers' in 'AuthorizationManagerRequestMatcherRegistry'
Rodrigo, parabéns pelo vídeo, cara eu tenho uma aplicação de terceiro que gera o JWT e na minha aplicação preciso apenas validar o token e liberar o acesso. Como posso fazer isso?
Valeu mano! Você tem a palavra secreta? Vai ser a mesma coisa do vídeo na parte da validação só que qm tá gerando o jwt precisa te passar a palavra secreta
Ao final do video, ao tentar receber o token no login, aconteceu o seguinte erro: "o.s.s.c.bcrypt.BCryptPasswordEncoder : Encoded password does not look like BCrypt" Eu adicionei uma senha simples '123' no Banco. Como faz para salvar de forma encriptografada como no exemplo do seu vídeo?
Excelente Aula, didatica cirurgica, parabens. O meu está dando um erro, parece não aceitar o : antMatchers, e está falando que meu csrf está deprecated , a msg: The method csrf() from the type HttpSecurity has been deprecated since version 6.1 and marked for removal
Boa tarde, em tese assim deveria funcionar: @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { return authenticationConfiguration.getAuthenticationManager(); } Qualquer coisa sobe no github que eu baixo e tento ver
Bom dia, Alison. Então, github.com/Rodsafreitas/security-jwt esse é o link do repo, da uma olhada se tem alguma coisa de diferente, qualquer coisa depois que olhar se não der certo, me manda 1 link do github com o teu projeto para ver se eu pego a diferença.
@@RodrigoFreitasAlv cara, ontem mesmo eu peguei o que estava acontecendo rsrsrs no meu controller eu tinha definido um caminho padrão @RequestMapping("/v1/api") e nos antMatcher eu passava apenas /login
@@RodrigoFreitasAlv E sabe o que eu queria ver com você também, é o seguinte, eu estou fazendo uma aplicação onde apenas eu queria ter autorização para a rota /createUserAdmin, pq eu vou criar um usuário uma vez só e depois fazer login para visualizar uma rota /listMessages, mas apenas eu vou ter acesso a essas rotas, aí me veio a dúvida... se eu subir essa api na nuvem, como eu vou fazer para apenas eu poder criar meu usuário e visualizar as mensagens, sendo que se eu deixar a rota /createUserAdmin como permitAll qualquer pessoa pode acessar e criar um usuário
Muito bom o vídeo! Vou usar para implementar igual na API que estou fazendo. Mas me tira uma dúvida? Eu estou querendo criar uma tabela em mysql para armazenar usuário e senha, mas a senha a ser armazenada no banco já precisa estar criptografada, correto? A minha ideia é que uma pessoa administradora inclua diretamente na tabela essas 2 informações, com comandos SQL, por exemplo. Tem como a pessoa administradora pegar a senha e criptografar externamente, com alguma ferramenta qualquer, para poder incluir manualmente no banco depois?
valeu, tem sim, foi o que eu fiz inclusive. eu usei um site que criptografa e salvei no banco diretamente. Você pode também criar algum tipo de endpoint que recebe a senha descriptografa e criptografa ela e salva. tipo esses sites assim: bcrypt.online/ daria pra salvar direto rodando um script de insert.
@@RodrigoFreitasAlv Show de bola, eu consegui segui o passo a passo e deu tudo certo. Agora eu estou tentando fazer um handler de excecao TokenExpiredException pra caso o token esteja expirado. Mas quando o erro ocorre o fluxo do programa nao cai dentro do handler... Me parece que esta tudo ok, verifiquei que a excecao ocorre, mas por algum motivo esse handler em expecifico parece estar sendo ignorado. Vc tem alguma ideia do que pode ser o problema?
@@RodrigoFreitasAlv eu segui o mesmo código que o seu, só que tive que usar o request matchers, e liberei o acesso para o /login, mas quando envio o post no postman ele da o 403 :/
Tenho bastante dúvidas na parte de criação de rotas em projeto spring com themyleaf. Exemplo: @{/cliente{id} Esse tipo de sintaxe me deixa meio perdido..
Na classe para autorizar as rotas "Configurations" eu coloquei a rota "/login", mesmo assim não está sendo autorizada acessa-la, alguem pode me ajudar?
Isso, para agilizar eu acabei usando o insert com a senha criptografada no banco, vou tentar trazer um vídeo parte 6 pra gente fazer um forms de cadastro onde a gente coloca o usuario e senha e ele criptografa e salva no banco pra gente
Cara, um ponto a melhorar, tenta explicar mais as coisas, em 2:17 do video vc mostra uma class Authentication, e eu não sei nem de onde ela saiu, isso e classe gerada em tempo de execução?
o youtube bloqueou por causa do link o comentario mas deu pra pegar o github mas eu vi que ta diferente esse metodo: @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http.csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and().authorizeHttpRequests() .antMatchers(HttpMethod.POST, "/login") .permitAll() .antMatchers(HttpMethod.GET, "/home") .permitAll() .anyRequest().authenticated() .and().addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class) .build(); } no seu codigo voce da um http.httpBasic que não precisaria e no final voce retorna http.build só sem ter pego a alteração q voce usou logo em cima entao e como se n tivesse aplicado configuração nenhuma
@@RodrigoFreitasAlv por enquanto não são problemas em si, o "problema" é ficar voltando versão do spring boot e das dependências e afins, mas seguindo em versões antigas funciona traquilo
@@RodrigoFreitasAlv sim... eu ia dizer q nn deu problema mas agr deu kkkk, está sempre dando como se o usuario ou senha estivesse errado não sei aonde posso estar errando pq, debugando o código ele traz o usuario certinho, porem parece q ele não está descriptografando a senha ou algo assim, sabe oq pode ser?
ótimo vídeo, didática top!! Eu acho até que deva ser simples, mas fiquei com uma dúvida, onde ou o que tu usou para criptografar a senha "123"?? Huehue
@@RodrigoFreitasAlv saquei, eu tentei usar um aqui, ele me retornou um erro falando algo da criptografia, mas ao menos acho que tô no caminho kaka Valeu mano, abraço!!
Essas implementações de segurança são bem complexas mesmo. Eu tentei abstrair bastante, você achou que esse método que eu usei ficou complexo? se puder dar a sua opinião pro próximo vídeo. Eu tentei resumir bastante ali usando somente o necessário e indo de partes.
@@RodrigoFreitasAlv Sua abordagem foi boa, mas ja vi varias formas diferentes, inclusive no trabalho e todas as formas que eu vi sempre tem uma grande diferença entre elas, mas sua explicação ficou show
@@leandromoreira7115 Simm cara! estou notando isso, cada lugar implementa de uma forma diferente, e o pior é que alguns lugares ditam como regra como "é preciso fazer desta forma", já vi um guia mesmo que orientava criar mais tabelas no banco afim de armazenar as Roles, sendo que pelo o que eu entendi, dá para abstrair isso na maioria dos casos
eae mano, sobe no github e me passa o teu nome e o nome do projeto (n manda o link pq o youtube bloqueia) que eu vejo aqui o que ta diferente, e me passa o erro que ta dando.
Opa mano, blz? eu deixei o projeto no github aqui nos comentarios ai la da pra pegar as dependencias: "Projeto no github: github.com/Rodsafreitas/security-jwt " nesse vídeo acabei esquecendo de mostrar no começo, desculpa.
Projeto no github: github.com/Rodsafreitas/security-jwt
Mano do céu, gastei dois dias para entender, o funcionamento do JWT Kara parece que foi um estralo, na minha cabeça quando entendi, nossa o sabor da vitória e maravilhoso, e por isso que falo programação não precisa nascer com dom , isso se chama persistência e dedicação amor a profissão, acho que chamo isso de curiosidade, acho que talento e outra coisa quem nasce com uma voz linda para cantar, para ser locutor, um talento para jogador isso e dom , agora profissão e dedicação claro que tem gente com maís facilidade de aprendizado, mas isso não tira o mérito de quem que se dedicar show de maia seus vídeos parabéns ❤❤❤❤❤
Muito obrigado mano. Isso ai, programação querer estudo e dedicação
Aula muito boa Rodrigo, fiquei preso 2 dias ainda na mesma aula porquê eu tinha me esquecido de colocar o @Autowired do AuthenticationManager. Conteúdo muito bom!
ah boa kk, acontece, valeu mano
me salvou essa aula, meu muito obrigado. Tô fazendo um curso porém a versão que ele usa o spring e a dependencia jwt é bem antiga. Procurei várias coisas e não achei nada. Mas esssa aula salvou mesmo. Consegui ver meu token gerado.
Boa mano, qualquer duvida manda ai!
Caramba... tirou todas as minha dúvidas.... já até modifiquei o meu código....
Excelente,,, parabéns....
valeu mano
Que conteúdo foda, parabéns demais! incrição garantida!
Valeuzao
Ótimo vídeo, Rodrigo! Seu conteúdo tem me ajudado bastante. Obrigado por compartilhar seu conhecimento.
Valeu Wanderson, de nada
ja dei o like e marquei como assistir depois, eu passei muita raiva com JWT porque atualizou a documentação, valeu
Boa, valeu, vai ter parte 2 esse vídeo
Parabéns pelo vídeo Rodrigo, me ajudou demais!
Valeu mano
Didática excelente! +1 inscrito.
Valeu mano!
Rodrigo uma duvida. Não sei se tinha outro video a respeito da criação de usuario, mas eu estou vendo esse video seu como se fosse o primeiro. Na minha api eu ja crio o usuario usando BCrypt de uma forma. Esse outro bean do BCrypt funciona com ele? E outra duvida, qual a magica que faz com que vc passando um usuario e senha ele consulta pelo username, mas acho que faz a comparação com a senha, é isso que faz no código né? Não consegui entender em qual parte isso acontece, ja que aparentemente no código não aparece
Então, eu acabei criando gerando a senha por um site e salvando no banco de dados direto, mas da pra fazer pelo codigo também. Eu vou criar um video parte 5 explicando essa parte de criar usuários, senha e mostrar algumas coisas em relação a isso que eu vi que gerou duvida na galera.
Então para ele comparar a senha eu utilizo esse metodo (github.com/Rodsafreitas/security-jwt/blob/master/src/main/java/br/com/spring/security/security/service/AuthenticationService.java):
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
return usuarioRepository.findByLogin(username);
}
e ele pega o usuario com base no username que eu passei e vai devolver ele completo, ali ele devolve um UserDetails que é uma implementação que minha classe Usuario faz e como eu to devolvendo o usuario que tem aquele username ele vai pegar o objeto todo e dar um get na senha dele e fazer uma comparação com a que eu to passando. Esse processo da comparação é feito somente eu criando uma classe e implementando esse metodo e o spring se encarrega de fazer toda essa parte, eu só preciso devolver uma classe que implementa o UserDetails.
Ótima explicação!! Mais um inscrito.
valeuzao mano
Rodrigo, tudo bem. Estou desenvolvendo um sistema com Spring Boot e Spring Security. Não gostaria de usar um front-end muito complexo. Estou tentando usar o Thymeleaf. Como fazer isso usando o JWT, é possível? Como incluir o Token em todas as requisições?
opa, tudo bem e voce? da sim, da pra trabalhar com isso utilizando o js junto. Eu vou fazer um video mostrando como trabalhar com esse jwt do lado do front-end
Só pra mim entender, esse parte ".withIssuer("PRODUTOS")" nos minutos 6:52 seria pq o seu microserviço é de produtos certo? No caso o meu seria de empresas então eu colocaria "EMPRESAS"? Não vi o projeto desde o começo, estou vendo somente a parte de implementar a autenticação e fiquei com essa duvida. Obrigada. Adoro seus videos.
Isso pode ser o nome do seu software e a identificação só
Valeuzao
Ótimo vídeos Rodrigo, tá faltando só uns vídeos como trabalhar com spring e redis
Vou fazer, atualmente tem um de cache aqui no canal
Cara, você é top, de verdade, continue a produzir conteudo =]
valeu mano, muito obrigado, vou continuar
Muito bom o conteúdo, porém tive uma certa dificuldade inicial configurando as dependências, porém depois de uns minutos consegui. Seria interessante colocar no começo do video quais dependências vão ser utilizadas
opa mano, valeu! beleza, vou mostrar no começo do video mas também tem aqui o projeto no github caso precise: github.com/Rodsafreitas/security-jwt/tree/master
fala Rodrigo. Excelente conteudo. Poderia informar as dependencias usadas no gradle?
opa! sim, aqui:to com essas aqui implementation 'com.auth0:java-jwt:4.2.1'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.mysql:mysql-connector-j'
tem o codigo no github também caso precise: github.com/Rodsafreitas/security-jwt/tree/master
vídeo muito top
valeu mano
só tive um problema, no vídeo você já possui um usuário cadastrado no banco de dados, que já possui o token porém no vídeo você não mostra como foi inserido... não consegui testar a rota /login por isso, mas gostei bastante do video.
bcrypt.online usa esse site pra gerar um hash da senha
Aí você insere o usuário lá
Valeu
Qualquer coisa comenta aí
Excelente vídeo!!
Valeuzao
Tive que fazer algumas mudanças na classe Configuration, pois você usou alguns recursos removidos no Spring Security 6, seria legal você fazer uma atualização no projeto!
opa, vou fazer uma versão atualizada disso e tentar incluir a parte do front-end para ficar mais dinamico
Legal, estarei esperando!
Opa! Daria para eu fazer a autenticação sem o uso de uma senha, ou seja, somente com o e-mail?
**Explicação:**
Em um sistema qualquer, um usuário solicitará a criação de uma conta. Um dos dados inseridos será o e-mail. O administrador do sistema validará o cadastro desse usuário, trocando o status de false para true. Em seguida, o usuário receberá um e-mail que sua conta foi cadastrada. Em seguida, o usuário poderá se logar com a conta do Google usando o mesmo e-mail que foi enviado ao administrador. Veja o passo a passo:
- O Frontend faz uma solicitação de login ao Google;
- O Google disponibiliza um token com o e-mail ao Frontend;
- O Frontend envia esse email para o Backend;
- O Backend verifica se o e-mail já existe no Banco de Dados;
- Caso o e-mail exista, é criado um token de autorização que permite o Frontend fazer conexão com o Backend.
Se eu compreendi bem daria sim, mas não teria só como mostrar isso por chat. Ai daria pra usar conta do google, facebook, etc.
Ótimo vídeo, mas estou com erro na classe Configurations, não consigo usaor o antMatchers parece a mensagem: Cannot resolve method 'antMatchers' in 'AuthorizationManagerRequestMatcherRegistry'
Valeu guilherme, tenta com requesMatchers no lugar de antMatchers pra ver se resolve.
Rodrigo, parabéns pelo vídeo, cara eu tenho uma aplicação de terceiro que gera o JWT e na minha aplicação preciso apenas validar o token e liberar o acesso. Como posso fazer isso?
Valeu mano! Você tem a palavra secreta? Vai ser a mesma coisa do vídeo na parte da validação só que qm tá gerando o jwt precisa te passar a palavra secreta
muito bom mano!! me ajudou bastante
boa mano, que bom que ajudou
Excelente aula, parabéns. Só faltou o link do repositório.
Valeu mano, vou subir no github e postar aqui
Ta na mão: github.com/Rodsafreitas/security-jwt
@@RodrigoFreitasAlv show demais, parabéns pelo conteúdo, iniciativa e didática.
Boa Noite. Ótimo vídeo. Quais as dependências que você utilizou?
Boa noite, valeu, vou colocar na descrição também.
implementation 'com.auth0:java-jwt:4.2.1'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.mysql:mysql-connector-j'
Ao final do video, ao tentar receber o token no login, aconteceu o seguinte erro:
"o.s.s.c.bcrypt.BCryptPasswordEncoder : Encoded password does not look like BCrypt"
Eu adicionei uma senha simples '123' no Banco.
Como faz para salvar de forma encriptografada como no exemplo do seu vídeo?
bcrypt.online/ usa esse site por exemplo, algum site assim que gera a senha criptografada pra você
@@RodrigoFreitasAlv, funcionou perfeitamente! Muito obrigado pela atenção e rapidez na resposta.
Excelente Aula, didatica cirurgica, parabens.
O meu está dando um erro, parece não aceitar o : antMatchers, e está falando que meu csrf está deprecated , a msg:
The method csrf() from the type HttpSecurity has been deprecated since version 6.1 and marked for removal
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
return http.authorizeHttpRequests(authorize -> {
authorize.requestMatchers(HttpMethod.POST, "/api/v1/client/login").permitAll();
authorize.requestMatchers(HttpMethod.POST, "/api/v1/mechanic/login").permitAll();
authorize.requestMatchers(HttpMethod.POST, "/api/v1/clients").permitAll();
authorize.requestMatchers(HttpMethod.GET, "/api/v1/clients").permitAll();
authorize.requestMatchers(HttpMethod.POST, "/api/v1/mechanics").permitAll();
authorize.anyRequest().authenticated();
})
.csrf(c -> c.disable())
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.build();
}
fiz assim e funcionou para mim
valeu mano, tenta com o requestmatchers e ve se funfa
@@RodrigoFreitasAlv Deu bom...obrigadooo
Boa tarde Rodrigo, como poderíamos implementar o CORS para uma aplicação Angular nesse caso?
Boa tarde mano, vou fazer um vídeo sobre o cors e mostrar
Muito bom seus vídeos mas empaquei na parte do JWT, essa classe mudou e fiquei perdido!
Valeu mano! Tu deu uma olhada no código do github? Eu subi o projeto lá vê se te ajuda
Boa tarde Rodrigo, você utilizou Spring boot 3? Não estou conseguindo achar o import do AuthenticationManager usando ele.
Boa tarde, em tese assim deveria funcionar:
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)
throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
Qualquer coisa sobe no github que eu baixo e tento ver
adiciona a dependência do spring security
Boa noite, Rodrigo! Segui o seu tutorial, mas minhas requisições estão com retorno 403 (Forbidden)
Bom dia, Alison. Então, github.com/Rodsafreitas/security-jwt esse é o link do repo, da uma olhada se tem alguma coisa de diferente, qualquer coisa depois que olhar se não der certo, me manda 1 link do github com o teu projeto para ver se eu pego a diferença.
@@RodrigoFreitasAlv cara, ontem mesmo eu peguei o que estava acontecendo rsrsrs no meu controller eu tinha definido um caminho padrão @RequestMapping("/v1/api") e nos antMatcher eu passava apenas /login
@@RodrigoFreitasAlv E sabe o que eu queria ver com você também, é o seguinte, eu estou fazendo uma aplicação onde apenas eu queria ter autorização para a rota /createUserAdmin, pq eu vou criar um usuário uma vez só e depois fazer login para visualizar uma rota /listMessages, mas apenas eu vou ter acesso a essas rotas, aí me veio a dúvida... se eu subir essa api na nuvem, como eu vou fazer para apenas eu poder criar meu usuário e visualizar as mensagens, sendo que se eu deixar a rota /createUserAdmin como permitAll qualquer pessoa pode acessar e criar um usuário
Muito bom o vídeo! Vou usar para implementar igual na API que estou fazendo.
Mas me tira uma dúvida?
Eu estou querendo criar uma tabela em mysql para armazenar usuário e senha, mas a senha a ser armazenada no banco já precisa estar criptografada, correto?
A minha ideia é que uma pessoa administradora inclua diretamente na tabela essas 2 informações, com comandos SQL, por exemplo.
Tem como a pessoa administradora pegar a senha e criptografar externamente, com alguma ferramenta qualquer, para poder incluir manualmente no banco depois?
valeu, tem sim, foi o que eu fiz inclusive. eu usei um site que criptografa e salvei no banco diretamente. Você pode também criar algum tipo de endpoint que recebe a senha descriptografa e criptografa ela e salva.
tipo esses sites assim: bcrypt.online/ daria pra salvar direto rodando um script de insert.
@@RodrigoFreitasAlv Show de bola, eu consegui segui o passo a passo e deu tudo certo.
Agora eu estou tentando fazer um handler de excecao TokenExpiredException pra caso o token esteja expirado. Mas quando o erro ocorre o fluxo do programa nao cai dentro do handler...
Me parece que esta tudo ok, verifiquei que a excecao ocorre, mas por algum motivo esse handler em expecifico parece estar sendo ignorado.
Vc tem alguma ideia do que pode ser o problema?
Configurei exatamente igual ao seu mas ele gera um 403, você sabe me dizer como posso seguir para liberar o acesso ao /login?
Na classe de configuração eu liberei o /login
@@RodrigoFreitasAlv eu segui o mesmo código que o seu, só que tive que usar o request matchers, e liberei o acesso para o /login, mas quando envio o post no postman ele da o 403 :/
No meu caso libera no Postman mas não libera no navegador
@@georgesdocarmo2613 o meu nao libera em nenhum deles :/ spring security tem sido o mais dificil até agora para eu aprender
manda o arquivo de config de voces, ou se preferirem podem subir o codigo no github do projeto pra eu ver melhor todo o contexto
Tenho bastante dúvidas na parte de criação de rotas em projeto spring com themyleaf.
Exemplo: @{/cliente{id}
Esse tipo de sintaxe me deixa meio perdido..
Cara, tem uma playlist aqui no canal com thymeleaf:
ruclips.net/p/PLXjt2Adje6u5aZvafdp4vpF7v3Z8mdcuE
Na classe para autorizar as rotas "Configurations" eu coloquei a rota "/login", mesmo assim não está sendo autorizada acessa-la, alguem pode me ajudar?
manda teu arquivo de configuração pra eu ver como voce fez
se cada vez ue vc falasse "tá" eu ganhasse 1 dólar rsrs.
brincadeiras a parte, excelente vídeo
Valeu mano
Demais! Ganhou mais um inscrito 😀
Valeu mano!
Fala Man, esse site pra criptografar a senha, vc copia e insere ela manualmente lá no banco mesmo?
Isso, para agilizar eu acabei usando o insert com a senha criptografada no banco, vou tentar trazer um vídeo parte 6 pra gente fazer um forms de cadastro onde a gente coloca o usuario e senha e ele criptografa e salva no banco pra gente
Cara, um ponto a melhorar, tenta explicar mais as coisas, em 2:17 do video vc mostra uma class Authentication, e eu não sei nem de onde ela saiu, isso e classe gerada em tempo de execução?
Opa, beleza. Não é uma classe do proprio modulo do spring
Opa Rodrigo, bele? Ótimo vídeo, mas to com dificuldade pq minha rota de login só da 403 Forbidden. Consegue dar um help?
Opa beleza e você? copia a classe de configuração aqui para eu ver
o youtube bloqueou por causa do link o comentario mas deu pra pegar o github mas eu vi que ta diferente esse metodo:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().authorizeHttpRequests()
.antMatchers(HttpMethod.POST, "/login")
.permitAll()
.antMatchers(HttpMethod.GET, "/home")
.permitAll()
.anyRequest().authenticated()
.and().addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class)
.build();
}
no seu codigo voce da um http.httpBasic que não precisaria e no final voce retorna http.build só sem ter pego a alteração q voce usou logo em cima entao e como se n tivesse aplicado configuração nenhuma
@@RodrigoFreitasAlv Opa, obrigada. Eu copiei, mas fica me dando 403. Se colocar o httpBasic() me retorna 401. Já não sei mais o que fazer :(
Estava seguindo o video certinho , porem em varias partes está sendo usado coisas antigas e que não estão sendo mais usadas :(
eu to pensando em refazer esse video utilizando uma versão mais recente, onde voce ta tendo problemas no codigo?
@@RodrigoFreitasAlv por enquanto não são problemas em si, o "problema" é ficar voltando versão do spring boot e das dependências e afins, mas seguindo em versões antigas funciona traquilo
ah blz. Esse negocio das compatibilidades do spring é meio zoado mesmo, porque toda hora tem uma att ai quebra tudo se tentar fazer do modo antigo
@@RodrigoFreitasAlv sim... eu ia dizer q nn deu problema mas agr deu kkkk, está sempre dando como se o usuario ou senha estivesse errado não sei aonde posso estar errando pq, debugando o código ele traz o usuario certinho, porem parece q ele não está descriptografando a senha ou algo assim, sabe oq pode ser?
decobri q está dando erro de badcredentials
ótimo vídeo, didática top!! Eu acho até que deva ser simples, mas fiquei com uma dúvida, onde ou o que tu usou para criptografar a senha "123"?? Huehue
Valeu mano. Então, Caio, eu usei um site tipo bcrypt generate algo assim ai eu passo o 123 e ele retorna o dado criptografado kk
@@RodrigoFreitasAlv saquei, eu tentei usar um aqui, ele me retornou um erro falando algo da criptografia, mas ao menos acho que tô no caminho kaka
Valeu mano, abraço!!
@@caiohenrique3539 boa, tenta ver os saltos também
@@RodrigoFreitasAlv feshow, mais uma vez muito obrigado
@@caiohenrique3539 de nada mano
Boa tarde, meu nobre. Obrigado pela aula! :)
Pode postar o link do github depois?
Eae boa tarde Thiago, o link aqui: github.com/Rodsafreitas/security-jwt
Se pode fazer algo similar só que não usando os tokens?
Posso sim mano, vou criar e por nessa playlist
poderia disponibilizar o codigo fonte
eae mano, github.com/Rodsafreitas/security-jwt tem aqui
Rpz esse assunto é o mais complexo que eu ja vi, pois todo video que eu assisto cada um faz de um jeito
Essas implementações de segurança são bem complexas mesmo. Eu tentei abstrair bastante, você achou que esse método que eu usei ficou complexo? se puder dar a sua opinião pro próximo vídeo.
Eu tentei resumir bastante ali usando somente o necessário e indo de partes.
@@RodrigoFreitasAlv Sua abordagem foi boa, mas ja vi varias formas diferentes, inclusive no trabalho e todas as formas que eu vi sempre tem uma grande diferença entre elas, mas sua explicação ficou show
valeu mano, pior que é vdd, ja trabalhei usando uma forma diferente mesmo
@@leandromoreira7115 Simm cara! estou notando isso, cada lugar implementa de uma forma diferente, e o pior é que alguns lugares ditam como regra como "é preciso fazer desta forma", já vi um guia mesmo que orientava criar mais tabelas no banco afim de armazenar as Roles, sendo que pelo o que eu entendi, dá para abstrair isso na maioria dos casos
@@Brunodelucasdev pois é man, me da agonia de ter que aprender isso por conta disso rsr
Rodrigo, já é a versão spring security 6?
Não, mas os comandos ali funcionam da mesma forma caso você já esteja com o 6 baixado.
Salve mano.
Parabéns pelo excelente conteúdo.
Você poderia disponibilizar o link do github?
Valeu mano, vou subir no github e posto aqui
Projeto no github: github.com/Rodsafreitas/security-jwt
qual site vc usou para criptografar a senha?
eae mano, eu acho que foi esse bcrypt-generator.com/
opa tem discord? to tendo dificuldade em rodar tipo ja tentei de tudo
eae mano, sobe no github e me passa o teu nome e o nome do projeto (n manda o link pq o youtube bloqueia) que eu vejo aqui o que ta diferente, e me passa o erro que ta dando.
ë uma pena que o paspalho não fala quais são as dependências necessárias né?
Opa mano, blz? eu deixei o projeto no github aqui nos comentarios ai la da pra pegar as dependencias:
"Projeto no github: github.com/Rodsafreitas/security-jwt
"
nesse vídeo acabei esquecendo de mostrar no começo, desculpa.
Cade o git do projeto?
Opa esse aqui: github.com/Rodsafreitas/security-jwt
Por que o nome produtos?
Coloquei um nome aleatório só pra demonstrar que irá trazer resultados, ai serve pra qualquer coisa: lista de usuários, etc.
@@RodrigoFreitasAlv tirou onda com esses vídeos
@@blackburn673 valeu mano