SpringBoot: Seguridad con Spring Security

SpringBoot
SpringBoot
Actualizado: 14/02/2025

Spring Boot 3, en combinación con Spring Security, proporciona un sólido marco para implementar seguridad en aplicaciones Java. Este módulo cubre cómo configurar y utilizar Spring Security en una aplicación Spring Boot 3 para asegurar endpoints, gestionar autenticación y autorización, y mucho más.

Configuración inicial

Para empezar, es necesario agregar las dependencias de Spring Security en tu archivo build.gradle o pom.xml. Aquí tienes un ejemplo utilizando Gradle:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-security'
}

Gestión de usuarios

Para gestionar usuarios, puedes definir un UserDetailsService personalizado. A continuación, un ejemplo de cómo hacerlo:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class UserConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("user")
                .password(passwordEncoder().encode("password"))
                .roles("USER")
                .build());
        manager.createUser(User.withUsername("admin")
                .password(passwordEncoder().encode("admin"))
                .roles("ADMIN")
                .build());
        return manager;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Protección de endpoints REST

Para asegurar endpoints REST, se puede utilizar la misma configuración de seguridad. Aquí un ejemplo de cómo proteger un controlador REST:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/public")
    public String publicEndpoint() {
        return "This is a public endpoint";
    }

    @GetMapping("/private")
    public String privateEndpoint() {
        return "This is a private endpoint";
    }
}

En la configuración de seguridad, se asegura que solo los usuarios autenticados puedan acceder al endpoint privado.

Explora más sobre SpringBoot

Descubre más recursos de SpringBoot

Alan Sastre - Autor del curso

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, SpringBoot es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.