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
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
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 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. 🙂🙌🏻
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 🫡
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 tu comentario, Christian. Da gusto leer comentarios así, es lo más gratificante cuando creas este tipo de contenido. Un fuerte 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
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.
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! 🙂🙌🏻
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! 🙂
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.
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: ruclips.net/video/3GqjpcxQnUI/видео.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! 🫡🤘🏻
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.
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. 😅
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.
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!
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!
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!
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.
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
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. 🙂
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.
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. 🇪🇸
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! 🙂
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
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.
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! 😁🤘🏻
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!
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.
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.
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!
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! 😁🤘🏻
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.
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
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! 🥳🙌🏻
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!
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. 🙂🙌🏻
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 🫡
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!
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!
ESPECTACULAR !!!!!
Muchas gracias, me alegro de que te haya sido de utilidad. 🫡
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!! 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 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.
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! 🙂🙌🏻
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! 🙂
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!
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.
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:
ruclips.net/video/3GqjpcxQnUI/видео.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! 🫡🤘🏻
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.
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
Muchas gracias por el contenido de valor🤓
Gracias a tí por comentar, 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!
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
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!
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!
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! 🙂🙌🏻
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!
Gracias, excelente !!!
Gracias a tí por comentar. Un fuerte 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.
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! 😇
🙌
🤗
se agradece
Gracias a tí por comentar. Un fuerte abrazo!
Interesante 😊
¡Muchas gracias! Espero que te haya servido. Un abrazo.
Graciaaas
Gracias a tí por comentar Andrés. 😁🤘🏻
Si uso maven que tendría que agregar?
en tu pom.xml
Son exáctamente las mismas librerías. Un fuerte abrazo! 🙂🤘🏻
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
Muchas gracias tio :)
De nada 😇
Excelente video
Muchas gracias! Un abrazo!
que tema estas usando en tu intellij?
Muy buenas, estoy utilizando Dark, para que las carpetas se vean así, estoy utilizando Atom Material Icons.
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
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.
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. 🙂
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.
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
Que buena portada !
Muchas gracias, Deus 😇
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! 🙂🤘🏻
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! 🙂
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!
1:55:27
😈
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!
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!
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! 😁🤘🏻
GRANDISIMO DIFF!
Mil gracias, Roberto! Un saludo!
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
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!!!!
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
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.
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!
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!