Ir al contenido principal

Spring Boot: Seguridad básica

Este es el cuarto artículo de la serie sobre Spring Boot que comenzamos el mes de Febrero. Estos son los anteriores:

El proyecto con el que estamos trabajando esta en GitHub, esa es su URL:  https://github.com/tecnificados/boot

Hoy vamos a empezar a trabajar con Spring Security a nivel muy básico.

Los cambios que vamos a comentar se corresponden con algunos commits del 28 de Marzo de 2021:



Hasta ahora hemos tocado la seguridad muy de refilón, solo hemos dicho que las páginas que hemos ido creando no requerían ningún tipo de seguridad.

Ahora vamos a crear una página que sí requiera estar identificado, y para realizar esa autenticación vamos a crear una página simple de login.

Una de las características que trae de serie Spring Security es protección contra CSRF: entre otras cosas nos garantiza que nadie nos manipula el código de nuestras páginas cuando estamos trabajando con un formulario (algo muy fácil de hacer gracias a las herramientas de depuración de los navegadores).

A continuación vamos repasar los cambios mas importantes en los commits:

Usuario Tecnificado (Commit 69e7131)

Por defecto la configuración de usuarios se encuentra en memoria (más adelante lo cambiaremos para que utilice la base de datos para persistir esta información). En este commit lo que hacemos es añadir al usuario "Tecnificado" con password "iroman" a la lista de usuarios. Lo hacemos con estas líneas en la clase WebSecurityConfig:

@Bean
@Override
public UserDetailsService userDetailsService() {
	UserDetails user =
		 User.withDefaultPasswordEncoder()
			.username("Tecnificado")
			.password("ironman")
			.roles("USER")
			.build();

	return new InMemoryUserDetailsManager(user);
}

Página de login y Lógica (Commit 2615f63)

En este commit hemos hecho dos cambios importantes:

En el primero, configuramos que nuevas vistas vamos a añadir y sus URLs. Lo hacemos en la clase MvcConfig:

public void addViewControllers(ViewControllerRegistry registry) {
	registry.addViewController("/hello").setViewName("hello");
	registry.addViewController("/login").setViewName("login");
}

En la aplicación ya está configurado que la página de login es "login", así que no hay que hacer nada.

Toda la lógica de la página de login, tampoco la necesitamos implementar, Spring sabe lo que tiene que hacer.

Y para acabar añadimos la JSP, una hoja de estilos y el logo.

Lo más importante de estos cambios es el "input hidden" del formulario, ya que sin esto Spring Security no permitirá identificarnos:

<form class="form-signin" action="<c:url value='/login' />" method="post">
	<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />

Esto hay que añadirlo dentro de todos los formularios que se utilicen en la aplicación.

Página Hello y retoques (Commit 38fea25)

Aquí terminamos añadiendo el código de la página que requiere la autenticación: un HTML simple que recupera el nombre del usuario y nos lo muestra en pantalla.

También he añadido un botón desconectar (con formulario) que nos devuelve a la página de login.

En la página inicial (index) he añadido un enlace a la nueva pagina en la parte superior, si pulsamos en ella nos aparecerá la página de login para poder acceder:







En este punto ya tenemos nuestra aplicación trabajando con una seguridad básica. Ya podemos plantearnos empezar con las pantallas del CRUD y trabajar más en serio con la Base de Datos, aunque a lo mejor hacemos algún cambio antes de continuar.

Nos vemos pronto.

Entradas populares de este blog

Spring Boot: Página inicial con Bootstrap

  Este es el segundo artículo de la serie sobre Spring Boot que comenzamos hace dos semanas, si quieres ver el primero puedes acceder pulsando aquí . En el primer artículo vimos cómo descargar nuestro proyecto configurado para nuestros intereses y listo para ser importado en nuestro IDE (nosotros usaremos Eclipse ). Lo primero que vamos a hacer es importar el proyecto: File -> Import Existing Maven Projects Seleccionamos el fichero pom.xml en la carpeta donde lo hemos descomprimido y esperamos unos segundos Cuando acabe la importación, esta es la estructura que nos aparecerá: Con Spring Boot no necesitamos configurar el servidor, ya se encarga él de facilitarnos la vida. Lo único que tenemos que hacer es arrancar la clase BootApplication.java , que se encargará de arrancar Tomcat y dejar nuestra aplicación funcionando en el puerto 8080.  Y si todo fuera bien, podríamos acceder a través de la URL:  http://localhost:8080/ Pero ahora mismo tenemos un error de conexión c...

Redirección de puertos en Virtual Box

Continuando con mis anteriores "posts", vamos a terminar nuestro entorno de pruebas redirigiendo los puertos que nos interesan de la máquina virtual a nuestro PC. Con Virtual Box podemos configurar la red de diversas formas, una de ellas es redireccionar los puertos de la máquina virtual a la nuestra. Es bastante fácil y rápido de configurar, y lo que hace es que tengamos unos puertos destinados al entorno de desarrollo y otros para el entorno de pruebas. Ejemplo de uso:  - podemos usar el puerto 8080 para desarrollar en eclipse en nuestro entorno de desarrollo con Tomcat. - usaremos el puerto 80 para el Tomcat del entorno de pruebas Más adelante veremos cómo configurar las redes de virtual box para que sean máquinas independientes conectadas a nuestra red y más opciones. Vamos a hacer la redirección del puerto 22 para poder acceder a nuestra máquina virtual a través de uno de los clientes ssh más extendidos (y con nombre controvertido): ...

Un bot con Telegram en Termux

En las últimas semanas he retomado un par de ideas que tuve hace algunos años: por un lado la idea de hacer un Bot con el que hacer operaciones a través de comandos específicos. En concreto me gustaría hacer poder realizar comandos de inversión en bolsa (de manera ficticia) por otro lado desplegar la aplicación en un móvil con Termux (emulador de Linux para Android) Así que os cuento los pasos que he hecho para realizar estas tareas. Creación de Bot con Telegram Busca el contacto @BotFather (es el bot oficial de Telegram para crear otros Bots). Pulsa en Iniciar o escribe /start para comenzar. Escribe el comando: /newbot BotFather te pedirá que le pongas un nombre visible a tu Bot. Ejemplo: Nombre: MiBotJava Luego te pedirá un username único que termine en Bot. Ejemplo: Username: MiBotJava_bot Si el nombre de usuario está disponible, te dará un mensaje de éxito. Obtén el token Después de crear el Bot, BotFather te dará un mensaje como este: Done! Congratulations on your new bot. You wil...