Tras mostraros como trabajar con usuarios en memoria, en este articulo veremos como utilizar cualquier tablade usuarios para basar la seguridad en la misma. Seremos nosotros los que podremos decidir como van a funcionar todas las caracteristicas de Spring Security, al poder establecer tan dinamicamente como queramos el registro de usuarios
La idea
La primera `parte es una modificacion de nuestro trabajo anterior, pero esta vez, los usuario saldran de la tabla de usuarios que estamos manteniendo, por lo que lo primero que necesitamos es codificar las password, para que no se guarden planas en la base de datos. Con en el articulo anterior ya habiamos configurado un PasswordEncoding, ahora solo deberemos invocarlo cuando insertemos usuario nuevo, y esquivar la modificación de contraseña en la actualización, y eso lo podemos hacer en el controller, por lo que lo modificamos
Ya solo con esta modificacion, podriais empezar a crear usuarios, utilizando el usuario y contraseña del anterior ejercicio, y, los usuarios creados ahora, que se guardaran con la password encriptada, serviran para las posteriores pruebas.
Vamos a crear un usuario que estará basado en el que nosotros tenemos en la base de datos, pero que contendrá toda la información necesaria para Spring Security, implementando la interfaz UserDetails.
El constructor, solo necesita guardar la información, que la hemos dejado en los atributos previstos, aunque no haría falta, ya que la interfaz nos obligara a implementar los métodos correctos
Y ahora a implementar los métodos de la interfaz, que lo podemos hacer como mas nos convenga, en nuestro caso, hemos decidido que todos los usuarios tienen el rol de ADMIN y todas las cuentas no están expiradas, ni bloqueadas, así como los credenciales tampoco están expirados y los usuarios están activados
Si quisiéramos otra cosa, solo haría falta implementar el método contestando el valor que nos interesase en función del usuario.
Para cargar la información, implementaremos la interfaz que espera Spring Security que es UserDetailsService
Ahora, ya podemos borrar la clase que se encargaba de crear los usuarios en memoria (SecurityConfigurationInMemory) y pasar a añadir la configuración para el acceso a usuarios propios, y, para ello, nos bastara con añadir un bean a la clase SecurityConfiguration
Con esto, nos deberia funcionar todo, pero… no hemos configurado nadaa acerca de las rutas que queremos que requieran password y las que no, y ahora ya empieza a ser necesario tenerlo en cuenta
Para ello, y, con tal de tener ordenadaa la informacion, abriremos un nuevo modulo de configuración, al que llamaremos ConfiguracionFiltro
De momento, y, para simplificar la explicación, lo único que hacemos es deshabilitar el csrf en general, ya que da problemas con POST libre, y luego protegemos los accesos a «/api/loQueSea» con los verbosPUT y DELETE y dejamos libre todo lo demas
Con eso, ya podéis hacer tranquilamente inserciones de usuarios, y luego utilizarlos para identificaros y modificar o destruir.
Nota: Acordaros de activar la autorizacion para PUT y DELETE y desactivarla para GET y POST
Creamos un usuario
y vemos que nos vuelve con la contraseña encriptada, ahora lo podemos modificar, registrándonos con él
y antes de enviar, la actualizacion, que en este caso es corregir el nombre del usuario
Cuando enviemos, nos aparecerá la modificación hecha
Todo el codigo de este articulo, lo teneis en https://github.com/recursosformacion/SpringSecurity/tree/020-Con_tabla_usuarios/UsuariosCrud
Y hasta aquí, lo que considere interesante de Spring Security, en próximos artículos, veremos como utilizar servicios de terceros para registrarnos.
Tambien me gustaria comentaros que todo el codigo esta escrito utilizando la version actual (Junio-2023) por lo que espero que no tengáis ningún problema reproduciéndolo.
Notas al proyecto
Todo el proyecto lo tenéis disponible en GitHub (https://github.com/recursosformacion/SpringSecurity/tree/main/UsuariosCrud), estando cada parte en una rama distinta, para que podáis reproducir cualquier version del mismo.
Los articulo que componen este proyecto son
- Planteando Spring Security En donde se plantea y se escribe un pequeño microservicio encargado de realizar un CRUD de una tabla de usuarios que luego se va a utilizar para el resto de artículos (Rama 001-base).
- Spring Security – Protección simple en donde presentamos
- la autentificación automática con el usuario por defecto (Rama 005-Con_password_automatico)
- Autentificación con usuario y contraseña fijo (Rama 010-Con_usuario_y_contraseña)
- Autentificacion con varios usuarios y contraseñas, con roles distintos, guardados en memoria (Rama 015-VariosUsuarios)
- Spring Security – Utilizando la tabla de usuarios En donde preparamos el acceso a nuestra tabla de usuarios para permitir la autentificacion contra ella (Rama 020-Con_tabla_usuarios).
- Spring Security – Trabajando con tokens Utilizando un token, manteniendo el resto de parametros como hasta ahora
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.