Hay un pequeÃąo error en el bucle for de. 1:43:15. Me equivoquÃĐ en el condicional. En este caso, si getAllUsers no estÃĄ vacÃo, simplemente devolverÃĄ "User already exists!" sin verificar si alguno de los usuarios existentes tiene los mismos datos que el usuario que se estÃĄ intentando registrar. Este serÃa el cÃģdigo corregido para validar que no se repite el email, puedes aÃąadir otros campos: for (UserEntity existingUser : getAllUsers) { if (existingUser.getEmail().equals(user.getEmail())) { response.setMessage("Email already exists!"); return response; } // Agrega mÃĄs comparaciones de campos relevantes segÚn sea necesario. } Mi recomendaciÃģn en que en vez de en el servicio, esto vaya dentro de la carpeta de UserValidations. Mil disculpas por el error. Un saludo.
si tuve ese error pero lo solucione, gracias Crack llevaba 15 dÃas tratando de implementar la seguridad a mi api y no habi podido y gracias a ese maravilloso tutorial lo logrÃĐ hacer en 4 horas, ahora lo puedo implementar a mi api, por mas Developers asà en el mundo
Muchas gracias por tu comentario. Espero que el vÃdeo sea de tu agrado y, como siempre, si te surge cualquier duda, no tengas reparo en preguntar. Un abrazo. ðððŧ
Muchas gracias por el contenido de este video, despuÃĐs de varios intentos me funcionÃģ para asà perfeccionar en temas de seguridad, que sigas haciendo videos de programaciÃģn para seguir aprendiendo.
La verdad me gustÃģ mucho, hice todo el tutorial, laverdad siento que me sirviÃģ como laboratorio puesto que nunca habia echo esto y no tenia ni idea de como funcionaba, muchas gracais
Muchas gracias por tu testimonio. SerÃĄ de gran ayuda para todas aquellas personas que vengan aquà buscando aprender sobre Spring Security. Me alegro de que te haya sido de utilidad. Un fuerte abrazo ðŦĄ
Este video me viene perfecto, es justo lo que estaba necesitando Muchas gracias por tu trabajo! Lo unico a mejorar seria explicar mas en detalle que hace cada metodo y clase para enteder los conceptos y no copiar por copiar Saludos
Muchas gracias por tu comentario y por la crÃtica constructiva. IntentarÃĐ hacer otro vÃdeo en el futuro explicando cada mÃĐtodo. Tambien tengo pendiente explicar como aÃąadir roles partiendo de lo explicado en este mismo vÃdeo. Un abrazo! ðððŧ
Muchas gracias por tu comentario, Christian. Da gusto leer comentarios asÃ, es lo mÃĄs gratificante cuando creas este tipo de contenido. Un fuerte abrazo!
Muchas gracias por el comentario, Santiago. La verdad es que es dificil ver contenido que explique Spring Security paso a paso y por eso decidà crearlo. Me alegro mucho de que te guste. Saludos desde EspaÃąa.
viejo, estoy en la uni haciendo estadias, y estoy desarrollando una aplicaciÃģn para una escuela, ahora ya llevo una semana tratando de implementar el token a mi api y segui con el desarrollo de la app movil pero solo no puedo jajaja, ahora voy a ver todo tu video y voy a tratar de implementarla, es el video mas actualizado que he encontrado en espaÃąol, ya que la mayorÃa son muy viejos, o no explican el porque, o he visto en mayorÃa de comentarios hablando sobre malas practicas, y estan deprecated, ya eh visto tu video a la mitad y se ve bueno o por lo menos que si vas explicando bien desÃĐame suerte y espero si poder hacerlo bien muchas gracias por la preparaciÃģn que le das a los videos y porque no lo dejas a la ahà se va, si explicas bien, gracias
si funcionaaaaaaaa graciaaaas... ahora tengo que implementar mis tablas sobre esta api, por cierto no sabia que habia que instalar ssl primero en el pc, ssh, etc. igual muchas gracias, me ayudas muchisimo, ahora tengo que colocar mis clases que tenia ya en mi otra api, que es una basico, la seccione por tres paquetes: controller donde colocaba las urls con los metodos, model, donde colocaba la estructura @Id y asi, y el ultimo paquete view, donde colocaba las interfaces y le daba extends a JpaRepository. ahora supongo que los archivos de controller lo metere en controllers, model los colocare dentro de persistence/entities/ y view los metere dentro de persistence/repositories pero la verdad nunca habia trabajado asi y se ve mejor tiene mejor estructura, seguire
Muchas gracias por tus palabras, me alegro de que te haya funcionado. La instacaciÃģn de ssh es solo en windows, el resto de sistemas operativos lo tienen por defecto. En cuanto saque un rato harÃĐ una segunda parte para implementar roles. Un abrazo y mil gracias de nuevo por tus palabras. ðŦĄððŧ
@@danielespanadero muchas gracias, vi tus repositorios, unos de stackover y el chat gpt y ya mas que implementarlos, ya entendi el porque y me fui mas a saber el tipo de anotaciones y el proceso, neta muchas gracias, ahora ya avanzare al desarrollo de la app en ionic, vato aunque no lo creas ayudas mas que profes en la uni, muchas gracias en serio un abrazo fuerte y ojala ser como tu en programacion
Gran video. una pregunta, esta forma de validar es recomendable? es que me ha parecido muy fÃĄcil de entender y en otros sitios habÃa visto que hacen la validaciÃģn de otras formas mas tediosas. Y luego, la clase validationsConfig cual es su uso porque luego inyectamos directamente el validuser en el servicio, no veo su uso. Un saludo y gracias
Muchas gracias por tu comentario, Diego. Pues la verdad es que es una forma muy utilizada hoy en dÃa y bastante segura, ya que Spring Security tiene a mucha gente detrÃĄs trabajando en mejorar la librerÃa dÃa tras dÃa. Aunque tambiÃĐn tienes herramientas externas cÃģmo captchas, que te ayudarÃĄn a evitar problemas de seguridad. En mi caso no soy muy partidario de utilizar algo que sea difÃcil de entender, ya que ahà sà que puedes llegar a tener problemas por un posible error humano. En cuanto a los archivos de configuraciÃģn, es algo que Spring ya utiliza automÃĄticamente en el proyecto, no hace falta indexarlo en ningÚn sÃtio. Un abrazo!
@@danielespanadero me referÃa a validar campos como que el nombre no sea nulo o cuando realizas una bÚsqueda en base de datos y ese usuario no existe, tu lo hiciste con la clase uservalidation sin usar excepciones. Pero he visto que se suele usar mucho el exceptionhandler. Cual recomiendas mas ?. Muchas gracias un saludo.
Me metà al video porque me dio risa ÃĐl tema de 0 a ssj legendario jajaja tengo un login por medio de cookies, pero cuando lo hice no tomÃĐ en cuenta que mis aplicaciones mÃģviles se tenÃan que conectar, se ve que eres un profesional en el ÃĄrea, mi conclusiÃģn cuando terminÃĐ el tutorial
Gracias por tu comentario, AndrÃĐs. La integraciÃģn de llaves en el frontend depende del tipo de autenticaciÃģn que uses. Lo normal es trabajar con JWT. El backend genera un token tras el login, que el frontend guarda (en localStorage, sessionStorage o en memoria). Luego, el token se envÃa en el encabezado Authorization en cada peticiÃģn. Un saludo!
Muy bien, este es el inicio, ahora te reto hacer lo siguiente porque yo no lo he logrado aun. Spring Security 6 Oatuh2 Authorization code con multi tenant.
Hola ! Estoy viendo tu video en este momento. Puse pausa para preguntarte si no podes subir esos apuntes teoricos. Me gusta aprender bases teoricas, me ayuda mucho a entender el codigo luego. Si mas adelante en el video decis que esos apuntes estan subidos en algun lado lo veo en un rato jaja
@@alejobeliz2 buenas. En principio, para realizar este tipo de vÃdeos suelo nutrirme de la documentaciÃģn oficial de la tecnologÃa en cuestiÃģn, al ser tan densa, la sintetizo y la reduzco a la parte que me interesa de cara a la realizaciÃģn del vÃdeo. Aquà te adjunto la documentaciÃģn oficial de Spring Security: spring.io/projects/spring-security#overview Aun asÃ, te recomiendo aprender una buena base de Spring Boot y Java antes de adentrarte en el mundo de Spring Security. Se te puede complicar mucho si no tienes esa base previa. Un saludo y mucho ÃĄnimo! ð
Con razÃģn los programadores no se adentran en la seguridad si es en tema muy tedioso, tendrÃĐ que procesar varias partes que no entendà bien porque no conozco el funcionamiento de algunas clases y sus mÃĐtodos pero la idea general si la capte bien. Buen video Bro!!
Muchas gracias por tu comentario, lo bueno de esto es que al principio se te hsce un mundo, pero poco a poco lo vas viendo cada vez mÃĄs claro y, en general en la mayorÃa de proyectos vas a utilizar configuraciones similares.
@@danielespanadero Gracias por el aporte, en estos momentos tengo dolores de cabeza con la implementaciÃģn de la seguridad ya de la forma que aprendà ya esta deprecada y tu video me vino del cielo.
Tienes mucha razon en que las empresas no le dan importancia a la seguridad. En la universidad reporte vulnerabilidades del sistema y no le tomaron importancia, y en la empresa tambien reporto problemas de seguridad en los proyectos y no hacen nada jajaja
Suele pasar, lo importante es que en tus aplicaciones intentes hacerlo de la mejor manera posible. Y para el resto, estÃĄ bien proponer, pero si ves que no hay iniciativa de solucionarlo, es mejor no insistir. ð
Gracias por estos videos âĪâĪ PodrÃas hacer uno de registro con activaciÃģn/verificaciÃģn de cuenta por correo en un api? (MVC, super sencillo de hacerlo, pero en el contexto de backend separado es otra cosa) Es una capa de seguridad que veo necesaria pero no se implementarla de manera correcta, creo que a mas de uno le serÃa Útil un tutorial.
Muy buenas, pues justo tengo un vÃdeo de cÃģmo enviar correos electrÃģnicos: th-cam.com/video/3GqjpcxQnUI/w-d-xo.html Para hacer lo que dices simplemente es aÃąadir un campo al usuario para comprobar si estÃĄ activo que inicialice en false. Al correo envÃas una url dinÃĄmica con el token y en el momento que esa url envÃe una peticiÃģn al back, cambias el valor de false a true. Me parece un buen vÃdeo para hacer. Me lo apunto para hacerlo cuando saque un rato. Un abrazo! ðŦĄðĪðŧ
Hola Daniel, yo estoy haciendo una capacitaciÃģn en una empresa, sobre Spring Seccurity, y lo que nos hizo hacer el profesor, es crear las claves desde el cmd con el mismo comando que tÚ, pero sin darle formato al archivo y sin especificar la ruta de guardado. ÂŋPuedo copiar la misma clave y el mismo certificado, y pegarlos en los archivos del proyecto que quiero crear, o no funcionarÃan allÃ? Eso es lo que no tengo claro Saludos
Muy buenas Manuel. En principio, siempre y cuando el archivo donde lo pegas tiene la extensiÃģn correcta, no deberÃa de darte ningÚn problema copiar y pegar. Un saludo. ð
Entonces, entiendo que es la misma clave siempre para todos los proyectos que creemos con seguridad? porque tÚ creas la clave directamente en el proyecto, y yo la he creado desde el CMD, sin asignarla a ningÚn proyecto, eso es lo que me confunde.@@danielespanadero
Tengo un problema con el import del archivo java.nio.file.Files, no me reconoce ese import pero java.nio.file.Paths y java.nio.file.* si me los reconoce, estoy usando Java y visual studio code
Muy buenas Santiago. En teorÃa no utilizo Java nio, esa es una librerÃa de gestiÃģn de archivos. Ahà es donde estÃĄ el problema, espero que puedas solucionarlo. Un abrazo! ð
ExcelentÃsimo aporte de verdad, muchas gracias, serÃa muy bueno una serie de microservicios con jwt, roles, logout y conexiÃģn a diferentes bases de datos ÃĐxitos y bendiciones, saludos desde BogotÃĄ Colombia
Es muy importante el tema de seguridad, peor el dia de hoy. Se agradece mucho el esfuerzo por hacer estos videos. una duda fuera de borda, con que programa grabas tus videos? Saludos
Muy buenas Roger, muchas gracias por tu comentario. Pues utilizo OBS Studio para grabar los vÃdeos. Es un programa bastante completo. Un fuerte abrazo.
Alguien me explica por que en el for de 1:43:15 el hecho de encontrar en la lista un usuario distinto de null implica que nuestro usuario ya exista por favor? Creo que no lo estoy entendiendo bien. Gran video, lo estoy disfrutando mucho!!!
de echo yo cambie el ciclo for, por que solo dejaba registrar un usuario para la modificaciÃģn del for le dije es que realizara comparaciÃģn con el email
Muchas gracias por tu mensaje y muy buena observaciÃģn. Me equivoquÃĐ en el condicional. En este caso, si getAllUsers no estÃĄ vacÃo, simplemente devolverÃĄ "User already exists!" sin verificar si alguno de los usuarios existentes tiene los mismos datos que el usuario que se estÃĄ intentando registrar. Este serÃa el cÃģdigo corregido para validar que no se repite el email, puedes aÃąadir otros campos: for (UserEntity existingUser : getAllUsers) { if (existingUser.getEmail().equals(user.getEmail())) { response.setMessage("Email already exists!"); return response; } // Agrega mÃĄs comparaciones de campos relevantes segÚn sea necesario. } Mi recomendaciÃģn en que en vez de en el servicio, esto vaya dentro de la carpeta de UserValidations. Mil disculpas por el error. Un saludo.
Muy buenas, no. Aquà enseÃąo Spring Security. Tengo otro vÃdeo sobre Java Mail que en combinaciÃģn con este podrÃas hacer todas estas cosas sin problema.
hermano creo que eso se hace en el confi-security archivo principal con el lambad en los accesos que permites con iniciar session o sin iniciar session inculso para usar swager es necesario colocarlo sin autorizar y permitall
Correcto, es como dice @danielcardenas4879 no querÃa cargar el vÃdeo mÃĄs de la cuenta. En cuanto saque un rato lo explico en un nuevo vÃdeo a partir de este. Un abrazo!
Muchas gracias por el apoyo, me alegro de que te haya servido. Pues no he leÃdo ningÚn libro sobre Spring Boot, no te puedo recomendar ninguno. Un saludo!
Como hacemos para generar una clave privada diferente a la del video? ya que genera igual a la del tutorial, Por cierto 1:59:45 Buena esa de Codear perfecto y que compile sin error! Jajja
Muy buenas, en principio OpenSSL siempre genera llaves privadas unicas e irrepetibles. Si te fijas en los carÃĄcteres son diferentes. Muchas gracias por tu comentario. Un fuerte abrazo! ððĪðŧ
Buen video, puede que le de una oportunidad de nuevo a spring security. En un proyecto personal que estoy haciendo por miedo a malas configuraciones termine usando keycloak, con 1gb aprox de ram que consume jajaja solo para autenticar a unos pocos users. Saludos!
Muy buenas Carlos. Te comparto mi repositorio en GitHub por si quieres compararlo con tu cÃģdigo. Espero que te sirva, un abrazo! github.com/DanielEspanadero/spring-security
Buen dÃa, antes que nada agradecerte por excelente tutorial. Te comento que al momento de ejecutar el loggin en postman me da el siguiente mensaje: { "error": "Illegal base64 character d" } HE verificado que el match de las contraseÃąas es correcto. Puedes ayudarme con eso por favor.
El error "Illegal base64 character d" generalmente ocurre cuando el token de autenticaciÃģn o la contraseÃąa no estÃĄ codificada correctamente en Base64. En una aplicaciÃģn Spring Security, esto puede suceder cuando usas autenticaciÃģn bÃĄsica (Basic Authentication) y la cabecera Authorization no se ha formado correctamente.
Muchas gracias por tus palabras, aquà te comparto la documentaciÃģn oficial de Spring Security: spring.io/projects/spring-security Un saludo desde Barcelona, EspaÃąa. ðŠðļ
No te preocupes, fallo mÃo. AdemÃĄs no lo explico muy bien. IntentarÃĐ solucionarlo lo antes posible ya que Lombok es una herramienta excelente. Un fuerte abrazo!
Ahora que estoy estudiando, ya me han inculcado el declarar constantes. Ese nÚmero de intentos, quizÃĄ serÃa mejor que fuera final y en mayÚsculas ð ð
Muy buenas Alex. Es un placer ver que cada vez hay mÃĄs gente nueva que se adentra en el maravilloso mundo de la programaciÃģn. Mi consejo es que intentes ir poco a poco y con pies de plomo, ahora estÃĄs con las constantes, pero pronto vendrÃĄn los bucles, los arrays, concurrencia... Y se puede hacer un poco abrumador. Si le pones pasiÃģn y ganas, llegarÃĄs lejos. Ãnimo. ÂŋA que parte del vÃdeo te refieres que usarÃas constantes? No se si te lo ha dicho el profe, pero en general, en la mayorÃia de proyectos todos los strings estÃĄn declarados en un archivo de constantes dentro de una ruta utils y se van llamando desde ahÃ. VerÃĄs que poco a poco lo irÃĄs dominando. Disfruta mucho de la etapa del cole, es la mejor. ð
andaba aprendiendo spring-security- version 6.0 cuando de la nada salio la 6.1 y cambiaron casi todo y ya empezaba a entender y llevaba 2 meses :/ aunque ahora entiendo algo me falta mas profundisarlo
Hago una introducciÃģn donde explico todos los conceptos que vemos en el cÃģdigo. Mi idea es hacer futuros vÃdeos profundizando en cada concepto, pero este vÃdeo estÃĄ enfocado en gente que no ha visto nunca estos conceptos. Si profundizo en materia, no serÃa apto para esas personas. Un saludo.
Voy a ddar mi opiniÃģn y no te lo tomes a mal, pero al final este video es un copia y pega sin explicar absolutamente nada, entiendo que no lo des todo mascado, pero no has llegado a explicar practicamente de que hacen las cosas o por que usar equis funcion. te doy el like por el curro pero es algo a mejorar , aun asi gracias por el video.
Muchas gracias por el comentario Hector. La verdad es que serÃa muy complicado explicar cada uno de los conceptos mÃĄs allÃĄ de que es lo que hacen. Es cÃģmo si empiezas a programar en Spring e intentas entender todo lo que hace el framework por debajo. Apunto la mejora y harÃĐ una segunda parte de este vÃdeo profundizando un poco mÃĄs, aunque no es tarea sencilla de explicar ni de entender. Un fuerte abrazo ð
Estoy siguiente el tutorial, la verdad muy impresionado con este y el resto de videos de spring, solo una cosa que me esta dando problemas, prmero openssl tuve que ejecutarlo desde la consola de openssl para generar las keys (almenos me ha funcionado) la otra es que en application.properties las lineas : jwtKeys.privateKeyPath=jwtKeys/private.key.pem jwtKeys.publicKeyPath=jwtKeys/public.key.pem Me salen subrayadas con el siguiente warning: Cannot resolve configuration property 'jwtKeys.publicKeyPath. No se si mi implementatation de nimbus-jose-jwt no esta bien o que, pero tras eso no me deja usar el JWSSigner, no me lo encuentra. Si supieras como arreglarlo te lo agradeceria, saludos y buen video de nuevo.
Muy buenas, a veces el IDE da problemas con el application.properties. Puedes asignar el valor directamente a las variables en el cÃģdigo. Por si quieres comparar, aquà te dejo el repositorio del proyecto completo: github.com/DanielEspanadero/spring-security/tree/main Un fuerte abrazo!
Hay un pequeÃąo error en el bucle for de. 1:43:15. Me equivoquÃĐ en el condicional. En este caso, si getAllUsers no estÃĄ vacÃo, simplemente devolverÃĄ "User already exists!" sin verificar si alguno de los usuarios existentes tiene los mismos datos que el usuario que se estÃĄ intentando registrar.
Este serÃa el cÃģdigo corregido para validar que no se repite el email, puedes aÃąadir otros campos:
for (UserEntity existingUser : getAllUsers) {
if (existingUser.getEmail().equals(user.getEmail())) {
response.setMessage("Email already exists!");
return response;
}
// Agrega mÃĄs comparaciones de campos relevantes segÚn sea necesario.
}
Mi recomendaciÃģn en que en vez de en el servicio, esto vaya dentro de la carpeta de UserValidations.
Mil disculpas por el error. Un saludo.
Hola! DÃģnde puedo descargar la documentaciÃģn que mensionas?
si tuve ese error pero lo solucione, gracias Crack llevaba 15 dÃas tratando de implementar la seguridad a mi api y no habi podido y gracias a ese maravilloso tutorial lo logrÃĐ hacer en 4 horas, ahora lo puedo implementar a mi api, por mas Developers asà en el mundo
mano, de lejos el mejor video que haya visto, me ha ayudado muchisimo, gracias de verdad
Muchas gracias por tu aporte, me alegro de que te haya servido. Un abrazo! ððĪðŧ
BuenÃsimo Dani, termino el que estoy viendo y sin duda caigo acÃĄ de vuelta! Ãxitos!
Muchas gracias por tu comentario. Espero que el vÃdeo sea de tu agrado y, como siempre, si te surge cualquier duda, no tengas reparo en preguntar. Un abrazo. ðððŧ
Excelente video muy buena la implementaciÃģn del jwt con las llaves publica y privada.
Muchas gracias, Eddy. Un fuerte abrazo desde Barcelona, EspaÃąa.
Muchas gracias por el contenido de este video, despuÃĐs de varios intentos me funcionÃģ para asà perfeccionar en temas de seguridad, que sigas haciendo videos de programaciÃģn para seguir aprendiendo.
Muchas gracias por tus palabras, Sebastian. Mi idea es seguir compartiendo este tipo de conceptos a medida que voy avanzando en materia. Un abrazo!
La verdad me gustÃģ mucho, hice todo el tutorial, laverdad siento que me sirviÃģ como laboratorio puesto que nunca habia echo esto y no tenia ni idea de como funcionaba, muchas gracais
Muchas gracias por tu testimonio. SerÃĄ de gran ayuda para todas aquellas personas que vengan aquà buscando aprender sobre Spring Security. Me alegro de que te haya sido de utilidad. Un fuerte abrazo ðŦĄ
Este video me viene perfecto, es justo lo que estaba necesitando
Muchas gracias por tu trabajo!
Lo unico a mejorar seria explicar mas en detalle que hace cada metodo y clase para enteder los conceptos y no copiar por copiar
Saludos
Muchas gracias por tu comentario y por la crÃtica constructiva. IntentarÃĐ hacer otro vÃdeo en el futuro explicando cada mÃĐtodo. Tambien tengo pendiente explicar como aÃąadir roles partiendo de lo explicado en este mismo vÃdeo. Un abrazo! ðððŧ
Muy bien, Dani.
Sigue asÃ, haciendo lo que mÃĄs te gusta.
Saludos y ÃĐxitos.
Muchas gracias por tu comentario, Christian. Da gusto leer comentarios asÃ, es lo mÃĄs gratificante cuando creas este tipo de contenido. Un fuerte abrazo!
Excelente explicaciÃģn Bro. Ya lo has dicho no hay mucho contenido de este tipo, Gracias. y como dicen ustedes Joder Tio!
Saludos desde Colombia.
Muchas gracias por el comentario, Santiago. La verdad es que es dificil ver contenido que explique Spring Security paso a paso y por eso decidà crearlo. Me alegro mucho de que te guste. Saludos desde EspaÃąa.
Muchas gracias, es el unico video que me a servido y puedo decir que puedo hacer jwt al fin
Muchas gracias por tus palabras, me alegro de que te haya servido. Un abrazo! ðĨģððŧ
viejo, estoy en la uni haciendo estadias, y estoy desarrollando una aplicaciÃģn para una escuela, ahora ya llevo una semana tratando de implementar el token a mi api y segui con el desarrollo de la app movil pero solo no puedo jajaja, ahora voy a ver todo tu video y voy a tratar de implementarla, es el video mas actualizado que he encontrado en espaÃąol, ya que la mayorÃa son muy viejos, o no explican el porque, o he visto en mayorÃa de comentarios hablando sobre malas practicas, y estan deprecated, ya eh visto tu video a la mitad y se ve bueno o por lo menos que si vas explicando bien desÃĐame suerte y espero si poder hacerlo bien muchas gracias por la preparaciÃģn que le das a los videos y porque no lo dejas a la ahà se va, si explicas bien, gracias
si funcionaaaaaaaa graciaaaas... ahora tengo que implementar mis tablas sobre esta api, por cierto no sabia que habia que instalar ssl primero en el pc, ssh, etc. igual muchas gracias, me ayudas muchisimo, ahora tengo que colocar mis clases que tenia ya en mi otra api, que es una basico, la seccione por tres paquetes: controller donde colocaba las urls con los metodos, model, donde colocaba la estructura @Id y asi, y el ultimo paquete view, donde colocaba las interfaces y le daba extends a JpaRepository. ahora supongo que los archivos de controller lo metere en controllers, model los colocare dentro de persistence/entities/ y view los metere dentro de persistence/repositories pero la verdad nunca habia trabajado asi y se ve mejor tiene mejor estructura, seguire
Muchas gracias por tus palabras, me alegro de que te haya funcionado. La instacaciÃģn de ssh es solo en windows, el resto de sistemas operativos lo tienen por defecto. En cuanto saque un rato harÃĐ una segunda parte para implementar roles.
Un abrazo y mil gracias de nuevo por tus palabras. ðŦĄððŧ
@@danielespanadero muchas gracias, vi tus repositorios, unos de stackover y el chat gpt y ya mas que implementarlos, ya entendi el porque y me fui mas a saber el tipo de anotaciones y el proceso, neta muchas gracias, ahora ya avanzare al desarrollo de la app en ionic, vato aunque no lo creas ayudas mas que profes en la uni, muchas gracias en serio un abrazo fuerte y ojala ser como tu en programacion
@@WiriDeveloper la clave es esa, ayudarnos entre nosotros. Leer tus palabras me motiva a seguir adelante, un abrazo! ððŧ
Muchas gracias por el video crack!
Muchas gracias a tà por comentar, no olvides suscribirte para estar al tanto de todo el contenido que voy subiendo al canal. Un abrazo!
Muchas gracias por el contenido de valorðĪ
Gracias a tà por comentar, un fuerte abrazo.
ESPECTACULAR !!!!!
Muchas gracias, me alegro de que te haya sido de utilidad. ðŦĄ
Gran video. una pregunta, esta forma de validar es recomendable? es que me ha parecido muy fÃĄcil de entender y en otros sitios habÃa visto que hacen la validaciÃģn de otras formas mas tediosas. Y luego, la clase validationsConfig cual es su uso porque luego inyectamos directamente el validuser en el servicio, no veo su uso. Un saludo y gracias
Muchas gracias por tu comentario, Diego. Pues la verdad es que es una forma muy utilizada hoy en dÃa y bastante segura, ya que Spring Security tiene a mucha gente detrÃĄs trabajando en mejorar la librerÃa dÃa tras dÃa. Aunque tambiÃĐn tienes herramientas externas cÃģmo captchas, que te ayudarÃĄn a evitar problemas de seguridad. En mi caso no soy muy partidario de utilizar algo que sea difÃcil de entender, ya que ahà sà que puedes llegar a tener problemas por un posible error humano. En cuanto a los archivos de configuraciÃģn, es algo que Spring ya utiliza automÃĄticamente en el proyecto, no hace falta indexarlo en ningÚn sÃtio.
Un abrazo!
@@danielespanadero me referÃa a validar campos como que el nombre no sea nulo o cuando realizas una bÚsqueda en base de datos y ese usuario no existe, tu lo hiciste con la clase uservalidation sin usar excepciones. Pero he visto que se suele usar mucho el exceptionhandler. Cual recomiendas mas ?. Muchas gracias un saludo.
Me metà al video porque me dio risa ÃĐl tema de 0 a ssj legendario jajaja tengo un login por medio de cookies, pero cuando lo hice no tomÃĐ en cuenta que mis aplicaciones mÃģviles se tenÃan que conectar, se ve que eres un profesional en el ÃĄrea, mi conclusiÃģn cuando terminÃĐ el tutorial
Muchas gracias por tus palabras. Me alegro de que te haya sido de utilidad. Un fuerte abrazo!
Muchas gracias!! Muy Útil este y otros videos.
Muchas gracias por tu comentario, es la gasolina que me motiva a segur dandolo todo en esta plataforma. Un fuerte abrazo!
Excelente, una consulta como haces la integracion del las llaves en el frontend. Muchas gracias de antemano
Gracias por tu comentario, AndrÃĐs. La integraciÃģn de llaves en el frontend depende del tipo de autenticaciÃģn que uses. Lo normal es trabajar con JWT. El backend genera un token tras el login, que el frontend guarda (en localStorage, sessionStorage o en memoria). Luego, el token se envÃa en el encabezado Authorization en cada peticiÃģn. Un saludo!
para el salto de linea automatico en intellij ctrl + alt + s, code style, hard wrap at: lo tengo en 150. Uso una pantalla 1920 * 1080
Mil gracias!! Te mereces el cielo. Un abrazo! ð
Muy bien, este es el inicio, ahora te reto hacer lo siguiente porque yo no lo he logrado aun. Spring Security 6 Oatuh2 Authorization code con multi tenant.
Pues no lo conozco, me pondrÃĐ a leer sobre el tema y en cuanto pueda subo vÃdeo al respecto.
Hola ! Estoy viendo tu video en este momento. Puse pausa para preguntarte si no podes subir esos apuntes teoricos. Me gusta aprender bases teoricas, me ayuda mucho a entender el codigo luego. Si mas adelante en el video decis que esos apuntes estan subidos en algun lado lo veo en un rato jaja
@@alejobeliz2 buenas. En principio, para realizar este tipo de vÃdeos suelo nutrirme de la documentaciÃģn oficial de la tecnologÃa en cuestiÃģn, al ser tan densa, la sintetizo y la reduzco a la parte que me interesa de cara a la realizaciÃģn del vÃdeo. Aquà te adjunto la documentaciÃģn oficial de Spring Security:
spring.io/projects/spring-security#overview
Aun asÃ, te recomiendo aprender una buena base de Spring Boot y Java antes de adentrarte en el mundo de Spring Security. Se te puede complicar mucho si no tienes esa base previa. Un saludo y mucho ÃĄnimo! ð
Con razÃģn los programadores no se adentran en la seguridad si es en tema muy tedioso, tendrÃĐ que procesar varias partes que no entendà bien porque no conozco el funcionamiento de algunas clases y sus mÃĐtodos pero la idea general si la capte bien.
Buen video Bro!!
Muchas gracias por tu comentario, lo bueno de esto es que al principio se te hsce un mundo, pero poco a poco lo vas viendo cada vez mÃĄs claro y, en general en la mayorÃa de proyectos vas a utilizar configuraciones similares.
@@danielespanadero Gracias por el aporte, en estos momentos tengo dolores de cabeza con la implementaciÃģn de la seguridad ya de la forma que aprendà ya esta deprecada y tu video me vino del cielo.
@@elimarchanparra8161 tranquii, yo creo que casi todos quedamos igual cone se dolor de cabeza xD pero es como todo, practica y practica
Tienes mucha razon en que las empresas no le dan importancia a la seguridad. En la universidad reporte vulnerabilidades del sistema y no le tomaron importancia, y en la empresa tambien reporto problemas de seguridad en los proyectos y no hacen nada jajaja
Suele pasar, lo importante es que en tus aplicaciones intentes hacerlo de la mejor manera posible. Y para el resto, estÃĄ bien proponer, pero si ves que no hay iniciativa de solucionarlo, es mejor no insistir. ð
Una pregunta mi estimado, una vez hecho esto como podemos hacer para que solo el logueado pueda acceder a ciertos endpoints?
â@@danielespanadero si insisten te pueden hechar por intensivoro
Tal cual gran perro, cuando pasp el Log4Shell si lo reporte y me hicieron caso, pero luego otros dÃĄndose el credito jijijij
Gracias por estos videos âĪâĪ
PodrÃas hacer uno de registro con activaciÃģn/verificaciÃģn de cuenta por correo en un api? (MVC, super sencillo de hacerlo, pero en el contexto de backend separado es otra cosa)
Es una capa de seguridad que veo necesaria pero no se implementarla de manera correcta, creo que a mas de uno le serÃa Útil un tutorial.
Muy buenas, pues justo tengo un vÃdeo de cÃģmo enviar correos electrÃģnicos:
th-cam.com/video/3GqjpcxQnUI/w-d-xo.html
Para hacer lo que dices simplemente es aÃąadir un campo al usuario para comprobar si estÃĄ activo que inicialice en false. Al correo envÃas una url dinÃĄmica con el token y en el momento que esa url envÃe una peticiÃģn al back, cambias el valor de false a true.
Me parece un buen vÃdeo para hacer. Me lo apunto para hacerlo cuando saque un rato. Un abrazo! ðŦĄðĪðŧ
Hola Daniel, yo estoy haciendo una capacitaciÃģn en una empresa, sobre Spring Seccurity, y lo que nos hizo hacer el profesor, es crear las claves desde el cmd con el mismo comando que tÚ, pero sin darle formato al archivo y sin especificar la ruta de guardado. ÂŋPuedo copiar la misma clave y el mismo certificado, y pegarlos en los archivos del proyecto que quiero crear, o no funcionarÃan allÃ?
Eso es lo que no tengo claro
Saludos
Muy buenas Manuel. En principio, siempre y cuando el archivo donde lo pegas tiene la extensiÃģn correcta, no deberÃa de darte ningÚn problema copiar y pegar. Un saludo. ð
Entonces, entiendo que es la misma clave siempre para todos los proyectos que creemos con seguridad? porque tÚ creas la clave directamente en el proyecto, y yo la he creado desde el CMD, sin asignarla a ningÚn proyecto, eso es lo que me confunde.@@danielespanadero
Tengo un problema con el import del archivo java.nio.file.Files, no me reconoce ese import pero java.nio.file.Paths y java.nio.file.* si me los reconoce, estoy usando Java y visual studio code
Muy buenas Santiago. En teorÃa no utilizo Java nio, esa es una librerÃa de gestiÃģn de archivos. Ahà es donde estÃĄ el problema, espero que puedas solucionarlo. Un abrazo! ð
ExcelentÃsimo aporte de verdad, muchas gracias, serÃa muy bueno una serie de microservicios con jwt, roles, logout y conexiÃģn a diferentes bases de datos
ÃĐxitos y bendiciones, saludos desde BogotÃĄ Colombia
Lo tengo pendiente. En cuanto pueda me pongo a ello. Un abrazo!
Una joyita de clase que nos brindaste. Muchas gracias por compartir tus conocimientos. Abrazo
Es muy importante el tema de seguridad, peor el dia de hoy.
Se agradece mucho el esfuerzo por hacer estos videos.
una duda fuera de borda, con que programa grabas tus videos?
Saludos
Muy buenas Roger, muchas gracias por tu comentario. Pues utilizo OBS Studio para grabar los vÃdeos. Es un programa bastante completo. Un fuerte abrazo.
Este video me va a re servir
Me alegro de que te sea de utilidad. Cualquier duda que te surja, no tengas reparo en preguntar. Un abrazo!
Alguien me explica por que en el for de 1:43:15 el hecho de encontrar en la lista un usuario distinto de null implica que nuestro usuario ya exista por favor? Creo que no lo estoy entendiendo bien. Gran video, lo estoy disfrutando mucho!!!
de echo yo cambie el ciclo for, por que solo dejaba registrar un usuario para la modificaciÃģn del for le dije es que realizara comparaciÃģn con el email
el video es muy bueno a un que siempre quedan unas cositas volando
pero del resto excelente
Muchas gracias por tu mensaje y muy buena observaciÃģn. Me equivoquÃĐ en el condicional. En este caso, si getAllUsers no estÃĄ vacÃo, simplemente devolverÃĄ "User already exists!" sin verificar si alguno de los usuarios existentes tiene los mismos datos que el usuario que se estÃĄ intentando registrar.
Este serÃa el cÃģdigo corregido para validar que no se repite el email, puedes aÃąadir otros campos:
for (UserEntity existingUser : getAllUsers) {
if (existingUser.getEmail().equals(user.getEmail())) {
response.setMessage("Email already exists!");
return response;
}
// Agrega mÃĄs comparaciones de campos relevantes segÚn sea necesario.
}
Mi recomendaciÃģn en que en vez de en el servicio, esto vaya dentro de la carpeta de UserValidations.
Mil disculpas por el error. Un saludo.
Muchas gracias por el aporte Jhon, un abrazo!
bro youso eclipse y maven y en properties no me deja agregar jwtkeys, podrias pasarme el codigo pa copiarlo?
Por supuesto, aqui tienes:
github.com/DanielEspanadero/spring-security
Un saludo! ððĪðŧ
Hay alguna diferencia en el codigo entre Gradle y maven para usar spring security ?
No, son empaquetadores de librerÃas diferentes, pero a nivel de cÃģdigo es exactamente lo mismo.
â@@danielespanaderoGracias amigo
Excelente video. tienes alguno otro explicando como crear relaciones entre entidades?
Muchas gracias por tu comentario, me lo apunto para hacerlo. SuscrÃbete al canal para estar al tanto. Un fuerte abrazo!
necsito tener instalado Gradle para usar en Java ?
Como empaquetador de librerÃas tienes tanto Gradle como Maven. En muchas ocasiones la instalaciÃģn la puedes hacer desde el propio IDE.
Si uso maven que tendrÃa que agregar?
en tu pom.xml
Son exÃĄctamente las mismas librerÃas. Un fuerte abrazo! ððĪðŧ
Hola. Esta implementaciÃģn tiene verificaciÃģn de correo electrÃģnico? OlvidÃĐ contraseÃąa? Cambiar contraseÃąa?
Muchas gracias.
Muy buenas, no. Aquà enseÃąo Spring Security. Tengo otro vÃdeo sobre Java Mail que en combinaciÃģn con este podrÃas hacer todas estas cosas sin problema.
que tema estas usando en tu intellij?
Muy buenas, estoy utilizando Dark, para que las carpetas se vean asÃ, estoy utilizando Atom Material Icons.
Que buena portada !
Muchas gracias, Deus ð
Gracias, excelente !!!
Gracias a tà por comentar. Un fuerte abrazo! ðððŧ
Alguna recomendaciÃģn para checar lo de los roles del usuario? (que algunos usuarios con cierto rol accedan a ciertas url y otras no )
hermano creo que eso se hace en el confi-security archivo principal con el lambad en los accesos que permites con iniciar session o sin iniciar session inculso para usar swager es necesario colocarlo sin autorizar y permitall
Correcto, es como dice @danielcardenas4879 no querÃa cargar el vÃdeo mÃĄs de la cuenta. En cuanto saque un rato lo explico en un nuevo vÃdeo a partir de este. Un abrazo!
@@danielespanadero Hola, podrÃas por favor hacer un video explicando como se lleva a cabo la autenticaciÃģn en base a este proyecto? Muchas gracias
Hasta ahora logre ver el video completo y me funciono de maravilla, muchas gracias por todo :D
Pd: ÂŋQuÃĐ libros de Springboot seugieres?
Muchas gracias por el apoyo, me alegro de que te haya servido. Pues no he leÃdo ningÚn libro sobre Spring Boot, no te puedo recomendar ninguno. Un saludo!
Como hacemos para generar una clave privada diferente a la del video? ya que genera igual a la del tutorial, Por cierto 1:59:45 Buena esa de Codear perfecto y que compile sin error! Jajja
Muy buenas, en principio OpenSSL siempre genera llaves privadas unicas e irrepetibles. Si te fijas en los carÃĄcteres son diferentes. Muchas gracias por tu comentario. Un fuerte abrazo! ððĪðŧ
ð
ðĪ
Entre por el Broly fase 3, me quede por la explicacion tan completa.
Muchas gracias por tu comentario. Me alegro mucho de que te haya aportado. Un abrazo! ð
Buen video, puede que le de una oportunidad de nuevo a spring security. En un proyecto personal que estoy haciendo por miedo a malas configuraciones termine usando keycloak, con 1gb aprox de ram que consume jajaja solo para autenticar a unos pocos users. Saludos!
Me alegro mucho de haberte motivado a darle una oportunidad a Spring Security. Tengo curiosidad por ver que tal te va. Un fuerte abrazo! ðððŧ
Interesante ð
ÂĄMuchas gracias! Espero que te haya servido. Un abrazo.
harÃĄs video de mapstruct?
Lo primero, muchas gracias. No conocÃa mapstruct y me ha gustado bastante, me lo entudio y en cuato pueda harÃĐ vÃdeo. Un abrazo!
Muchas gracias tio :)
De nada ð
Excelente video
Muchas gracias! Un abrazo!
Al momento de generar el token me da un error
Error generating JWT: Illegal base64 character 2d
Alguien sabe que podrÃa ser?
Muy buenas Carlos. Te comparto mi repositorio en GitHub por si quieres compararlo con tu cÃģdigo. Espero que te sirva, un abrazo!
github.com/DanielEspanadero/spring-security
Buen dÃa, antes que nada agradecerte por excelente tutorial. Te comento que al momento de ejecutar el loggin en postman me da el siguiente mensaje:
{
"error": "Illegal base64 character d"
}
HE verificado que el match de las contraseÃąas es correcto. Puedes ayudarme con eso por favor.
El error "Illegal base64 character d" generalmente ocurre cuando el token de autenticaciÃģn o la contraseÃąa no estÃĄ codificada correctamente en Base64. En una aplicaciÃģn Spring Security, esto puede suceder cuando usas autenticaciÃģn bÃĄsica (Basic Authentication) y la cabecera Authorization no se ha formado correctamente.
@@danielespanadero pude solucionarlo, muchas gracias por todo crack YOU ARE THE BOSS!!!!
De dÃģnde puedo acceder a la guÃa escrita ? Muchas gracias buen video. Saludos desde argentina campeones del mundo ð
Muchas gracias por tus palabras, aquà te comparto la documentaciÃģn oficial de Spring Security:
spring.io/projects/spring-security
Un saludo desde Barcelona, EspaÃąa. ðŠðļ
@@danielespanadero gracias pero la ofical la conocia, yo me refiero a la que haces referencia en el minuto 07:18
se agradece
Gracias a tà por comentar. Un fuerte abrazo!
GRANDISIMO DIFF!
Mil gracias, Roberto! Un saludo!
Graciaaas
Gracias a tà por comentar AndrÃĐs. ððĪðŧ
Pero no estÃĄs usando lombok , no vi las anotaciones , solo lo generas con el mÃĐtodo tradicional del IDE
08:59 ð
@@danielespanadero ahh bien, perdÃģn no escuchÃĐ esa parte donde dcias que te daba problemas , buenÃsimo, genial tus videos amigo, Saludos
No te preocupes, fallo mÃo. AdemÃĄs no lo explico muy bien. IntentarÃĐ solucionarlo lo antes posible ya que Lombok es una herramienta excelente. Un fuerte abrazo!
@@danielespanadero dale Daniel , gracias por tus videos , abrazo y suerte!
Ahora que estoy estudiando, ya me han inculcado el declarar constantes. Ese nÚmero de intentos, quizÃĄ serÃa mejor que fuera final y en mayÚsculas ð ð
Muy buenas Alex. Es un placer ver que cada vez hay mÃĄs gente nueva que se adentra en el maravilloso mundo de la programaciÃģn. Mi consejo es que intentes ir poco a poco y con pies de plomo, ahora estÃĄs con las constantes, pero pronto vendrÃĄn los bucles, los arrays, concurrencia... Y se puede hacer un poco abrumador. Si le pones pasiÃģn y ganas, llegarÃĄs lejos. Ãnimo.
ÂŋA que parte del vÃdeo te refieres que usarÃas constantes? No se si te lo ha dicho el profe, pero en general, en la mayorÃia de proyectos todos los strings estÃĄn declarados en un archivo de constantes dentro de una ruta utils y se van llamando desde ahÃ. VerÃĄs que poco a poco lo irÃĄs dominando.
Disfruta mucho de la etapa del cole, es la mejor. ð
excelente. Podrias pasar el codigo fuente de github?
Por supuesto, aquà tienes. No olvides dejar una estrella âïļ
github.com/DanielEspanadero/spring-security
@@danielespanadero EXCELENTE! cuando podriamos ver algo de testing bien hardcore? gracias
andaba aprendiendo spring-security- version 6.0 cuando de la nada salio la 6.1 y cambiaron casi todo y ya empezaba a entender y llevaba 2 meses :/ aunque ahora entiendo algo me falta mas profundisarlo
Esto evoluciona a pasos agigantados. La clave estÃĄ en entender conceptos y no memorizar cÃģdigo. Un abrazo!
EstarÃa bueno que expliques lo que haces, no solo copiar codigo
Hago una introducciÃģn donde explico todos los conceptos que vemos en el cÃģdigo. Mi idea es hacer futuros vÃdeos profundizando en cada concepto, pero este vÃdeo estÃĄ enfocado en gente que no ha visto nunca estos conceptos. Si profundizo en materia, no serÃa apto para esas personas. Un saludo.
1:55:27
ð
Getter and setter , lombok ðĪ·ðūââïļ
Lo explico en el vÃdeo ð
@@danielespanadero ahh porque vi hasta el minuto 25 y vi que solo le dabas al generate y no usabas las anotaciones de lombok, perfecto
08:59 ð
I hoped it was in english ðĒ
I would like to be able to make videos in English in the future. A hug ð
Voy a ddar mi opiniÃģn y no te lo tomes a mal, pero al final este video es un copia y pega sin explicar absolutamente nada, entiendo que no lo des todo mascado, pero no has llegado a explicar practicamente de que hacen las cosas o por que usar equis funcion. te doy el like por el curro pero es algo a mejorar , aun asi gracias por el video.
Muchas gracias por el comentario Hector. La verdad es que serÃa muy complicado explicar cada uno de los conceptos mÃĄs allÃĄ de que es lo que hacen. Es cÃģmo si empiezas a programar en Spring e intentas entender todo lo que hace el framework por debajo. Apunto la mejora y harÃĐ una segunda parte de este vÃdeo profundizando un poco mÃĄs, aunque no es tarea sencilla de explicar ni de entender. Un fuerte abrazo ð
Estoy siguiente el tutorial, la verdad muy impresionado con este y el resto de videos de spring, solo una cosa que me esta dando problemas, prmero openssl tuve que ejecutarlo desde la consola de openssl para generar las keys (almenos me ha funcionado) la otra es que en application.properties las lineas :
jwtKeys.privateKeyPath=jwtKeys/private.key.pem
jwtKeys.publicKeyPath=jwtKeys/public.key.pem
Me salen subrayadas con el siguiente warning: Cannot resolve configuration property 'jwtKeys.publicKeyPath.
No se si mi implementatation de nimbus-jose-jwt no esta bien o que, pero tras eso no me deja usar el JWSSigner, no me lo encuentra.
Si supieras como arreglarlo te lo agradeceria, saludos y buen video de nuevo.
Muy buenas, a veces el IDE da problemas con el application.properties. Puedes asignar el valor directamente a las variables en el cÃģdigo.
Por si quieres comparar, aquà te dejo el repositorio del proyecto completo:
github.com/DanielEspanadero/spring-security/tree/main
Un fuerte abrazo!