En el artículo Introducción a Spring Security y creación de un login vimos que tenemos dos tipos de end points (urls) las públicas y las privadas.

Por defecto, si trabajamos con Spring Security, todos los end points son privados. En este artículo, vamos a crear:

  • End point público: todo el que acceda a la web podrá acceder a dicho end point. Crearemos un end point, hacía la URL: http://localhost:8080/
  • End points privados específicos para el ROL de USER: donde solamente podrán acceder los usuarios registrados con el ROL de USER. Crearemos dos end points, uno hacía la URL http://localhost:8080/user y otro hacía la subcategoría http://localhost:8080/user/test.
  • End points privados específicos para el ROL de ADMIN: donde solamente podrán acceder los usuarios registrados con el ROL de ADMIN. Crearemos dos end points, uno hacía la URL http://localhost:8080/admin y otro hacía la subcategoría http://localhost:8080/admin/test.
  • End point privado «shared» (compartido) para los ROLES de ADMIN y USER: donde solamente podrán acceder los usuarios registrados con cualquiera de esos dos roles. Crearemos un end point, hacía la URL http://localhost:8080/shared.

Estructura del proyecto

La estructura sobre la que trabajaremos en este proyecto será la misma que la que hemos trabajado en el artículo de Introducción a Spring Security y creación de un login por lo que si no la habéis creado podéis seguir el tutorial anterior (aunque no es imprescindible).

Dependencias del proyecto

Las dependencias del fichero pom.xml tampoco cambiarán, utilizaremos:

SegurityProjectApplication (main)

Y lo mismo pasa con el fichero del SegurityProjectApplication (main):

LoginController

El controlador que responderá a las peticiones que realicemos a nuestra aplicación, tiene los end points que ya hemos explicado anteriormente.

SecurityConfig

SecurityConfig será el encargado de gestionar los usuarios, los permisos y los roles. En este ejercicio vamos a profundizar bastante más respecto al ejemplo que ya vimos en el artículo anterior. Buscando como finalidad el familiarizarnos con todos estos aspectos y dejándolos mucho más claros.

En este fichero tenemos dos métodos dentro de a clase:

  • ConfigureGlobal: contiene los usuarios con sus correspondientes roles.
  • Configure: contiene los permisos para cada rol.

Comprobando la aplicación

Bien, una vez tenemos la aplicación lista vamos a arrancarla para comprobar su funcionamiento.

End point público

URL: http://localhost:8080/

Si nos fijamos en este end point, no necesitamos registrarnos para realizar la petición.

End points privados específicos para el ROL de USER o ADMIN:

URL: http://localhost:8080/user y http://localhost:8080/user/test

Si hacemos una petición a http://localhost:8080/user podemos ver cómo nos solicita un logeo:

Logeandonos como USER en http://localhost:8080/user

Si nos logeamos con user:

Una vez logeados, vemos como tenemos acceso al end point solicitado:

Y como tenemos la sesión de user iniciada que pertenece al ROL de USER, gracias a antMatchers(«/user/**»).hasRole(«USER») podemos acceder a cualquier petición que tenga /user/loquesea. En nuestro caso, hemos creado una en el controlador llamada http://localhost:8080/user/test. Si realizamos la petición, podemos comprobar que:

Haciendo un logOut

URL: http://localhost:8080/logout

Si pulsamos sobre el botón de logout:

Podemos ver como volvemos a la pantalla inicial.

Logeandonos como admin en http://localhost:8080/user

Si volvemos a hacer la petición a http://localhost:8080/user e iniciamos la sesión con admin, podremos ver como no está autorizado y por tanto al iniciar sesión nos aparecerá que no existe la página.

Pero al iniciar sesión vemos que ¡BOOOMMMM! Nos aparece una página en blanco. Debido a que no estamos autorizados.

Espero que os haya gustado. Un saludo javer@s!