Spring Boot Framework incluye un módulo llamado Spring Security. Ayuda a proteger los recursos de las aplicaciones web del acceso no autorizado con una codificación mínima.

Ofrece autenticación, autorización y muchas otras funciones para aplicaciones simples a nivel corporativo. Si la autenticación es exitosa, se accede al recurso. De lo contrario, el usuario está restringido.

Spring Security es una plataforma abierta. Es bastante fácil para un desarrollador escribir su propio mecanismo de autenticación. Muchos desarrolladores que utilizan Spring Security tienen que incorporarlo en sus propios sistemas que no siguen estándares de seguridad específicos. En este caso, Spring Security es flexible para la integración.

requisitos

  • Un IDE para, por ejemplo, IntelliJ IDEA
  • JDK 1.8 o superior
  • Una aplicación Spring MVC con un formulario de inicio de sesión con una lista de usuarios autorizados.
  • Un sistema de compilación de Gradle 4 o superior o Maven 3.2 o superior

Paso 1: actualice build.gradle o POM.xml

Para el sistema de compilación Gradle, debe agregar una dependencia para que Spring Security funcione. Tienes que agregar el código en “Dependencias”

dependencies {
compile("org.springframework.boot:spring-boot-starter-security")
}

Si su proyecto utiliza el sistema de compilación Maven, agregue la siguiente línea de código en la sección en POM.xml

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-security</artifactId>
   </dependency>
</dependencies>

Paso 2: definir la configuración de seguridad en la aplicación

En este paso, crea una clase de configuración. Se agrega WebSecurityConfigurerAdapter y usted anula sus métodos configure () y userDetailsService (). El método configure () contiene código para dos tipos de rutas de aplicación, una que requiere seguridad y otra que no requiere seguridad.

El método userDetailsService () se usa para almacenar un usuario en la memoria. Un usuario puede autorizar utilizando las credenciales codificadas en este método.

A continuación se muestra el archivo de configuración completo llamado WebSecurityConfiguration.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http
               .authorizeRequests()
               .antMatchers("https://hostadvice.com/", "/main").permitAll()
               .anyRequest().authenticated()
               .and()
               .formLogin()
               .loginPage("/userLogin")
               .permitAll()
               .and()
               .logout()
               .permitAll();
   }

   @Bean
   @Override
   public UserDetailsService userDetailsService() {
       UserDetails user =
               User.withDefaultPasswordEncoder()
                       .username("user")
                       .password("password")
                       .roles("USER")
                       .build();
       return new InMemoryUserDetailsManager(user);
   }
}

Las rutas “https://hostadvice.com/” y “/ main” están configuradas para que no se requiera autenticación. Todas las demás rutas deben estar autenticadas.

El método userDetailsService () configura un almacén de usuarios en la memoria con un solo usuario. Este usuario recibe el nombre de usuario “usuario”, la contraseña “contraseña” y el rol “USUARIO”.

Paso 4: cree un formulario de inicio de sesión para acceder a su aplicación web

Ahora que se ha aplicado la seguridad a la ruta de la aplicación, es hora de ver cómo funcionan. Usted crea una página de inicio de sesión que utiliza su nombre de usuario y contraseña y la envía a la URL “principal”, que es la página de entrada de la aplicación. Si las credenciales son correctas, el usuario puede acceder a cualquier URL de la aplicación. A continuación se muestra una página de inicio de sesión simple hecha en HTML. El archivo es main.html.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
     xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
   <title> Main Page </title>
</head>
<body>
<h2>Welcome</h2>
<form th:action="@{/main}" method="post">
   <div><label> User Name : <input type="text" name="username"/> </label></div>
   <div><label> Password: <input type="password" name="password"/> </label></div>
   <div><input type="submit" value="Sign In"/></div>
</form>
<div th:if="${param.error}">
   Username or password is incorrect, you are not authorized to login. Thanks.
</div>
</body>
</html>

El formulario del archivo anterior envía el nombre de usuario y la contraseña a la dirección URL principal. Después del envío, Spring Security toma medidas y toma la acción apropiada según las credenciales.

Agregará esta vista HTML a la clase de controlador MVC para asociarla con la función.

public void addViewControllers(ViewControllerRegistry registry) {
       registry.addViewController("/main").setViewName("home");
}

Paso 4: prueba la función

Al acceder a la URL principal, al usuario se le presenta la siguiente página.

Después de iniciar sesión correctamente, el usuario puede acceder a todos los recursos (URL) de la aplicación.

Conclusión

Para habilitar Spring Security en su aplicación Spring Boot, debe agregar la dependencia en el archivo POM o build.gradle del proyecto de acuerdo con el sistema de compilación que se esté utilizando. Entonces necesitas crear un archivo de configuración. Contiene URL que requieren autenticación y cuáles no. Luego, necesitará una página de inicio de sesión para enviar las credenciales a Spring Security para que pueda decidir si el usuario puede iniciar sesión o no. Debe agregar la página de inicio de sesión al controlador de la aplicación.