Ir al contenido

Empieza aquí

Cómo usar esta guía

Qué vas a aprender, en qué orden y cómo leer cada lección para que la seguridad deje de ser una caja negra.

Básico6 min de lectura

Al terminar sabrás

  • Qué cubre la guía y en qué orden conviene leerla.
  • Cómo está construida cada lección y para qué sirve cada bloque.
  • Qué versiones de Java, Spring Boot y Spring Security usa el código.

La seguridad suele enseñarse como una lista de reglas (“activa esto”, “nunca hagas aquello”). Aquí la vamos a enseñar como un sistema que puedes razonar: cada decisión que toma tu aplicación —dejar pasar una petición, rechazarla con 401, con 403— tiene una causa concreta que puedes encontrar.

La guía tiene dos partes que se leen en orden:

  1. Parte 1Fundamentos de seguridadamenazas, identidad, contraseñas, criptografía, cookies y tokens, vulnerabilidades web, validación de entrada, CORS, OAuth2, abuso de APIs, secretos y cadena de suministro
  2. Parte 2Spring Security 7filtros, configuración, autenticación, credenciales, sesiones, autorización, JWT, OAuth2, microservicios, WebFlux, MFA, testing, producción
Primero los conceptos que no dependen de ningún framework; después, cómo los implementa Spring Security.

Si ya sabes qué es un hash con sal, una cookie HttpOnly o un ataque CSRF, puedes saltar directamente a la parte 2. Cada lección de Spring enlaza a los fundamentos que necesita, así que siempre puedes volver.

Todas las lecciones siguen la misma estructura, para que sepas qué esperar:

  1. Analogíael concepto en el mundo real
  2. Cómo funcionael mecanismo, con diagramas
  3. Códigosintaxis actual, comentada
  4. Trampaslo que sale mal en proyectos reales
  5. Mini labun reto con respuesta

Estos son los bloques que verás:

Todo el código usa la sintaxis actual de Spring Security 7. Pasa el cursor por los términos subrayados para ver qué significan, a qué clase pertenecen, desde qué versión existen y un enlace a su documentación oficial. En móvil, tócalos.

SecurityConfig.java
@Configuration
@EnableWebSecurity
class SecurityConfig {
@Bean
SecurityFilterChain api(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/public/**").permitAll()
.anyRequest().authenticated())
.httpBasic(Customizer.withDefaults());
return http.build();
}
}

Lo mismo funciona con el código dentro del texto, como SecurityFilterChain o @PreAuthorize, y con cabeceras HTTP como WWW-Authenticate. La lista completa de términos está en el glosario.

PiezaVersiónNota
Java25 (LTS)Versión recomendada. Spring Boot 4 exige Java 17 como mínimo y Java 21 también vale; lo nuevo de Java 25 está en Java 25 y la seguridad
Spring Boot4.1.xstarters renombrados: spring-boot-starter-webmvc, spring-boot-starter-security-oauth2-resource-server…
Spring Security7.1.xcódigo verificado contra la API de la 7.1.2
Spring Authorization Serverincluido en Spring Security 7ya no es un proyecto aparte

Los ejemplos de Spring giran alrededor de una misma API pequeña: una API de notas personales. Cada nota tiene un dueño; un usuario normal solo ve y edita las suyas; un administrador puede listarlas todas. Es pequeña a propósito: toda la complejidad está en la seguridad, no en el dominio.

Si quieres seguir los mini labs en tu máquina, crea el proyecto en start.spring.io con Spring Boot 4.1, Java 25 y estas dependencias: Spring Web, Spring Security, Spring Data JPA, H2 Database y Validation. Y desde el primer día, activa el log que explica cada decisión de seguridad:

application.properties
logging.level.org.springframework.security=TRACE

Mini lab · 10 min

Prepara tu laboratorio

Objetivo: Tener un proyecto Spring Boot 4 con seguridad activa y el log de seguridad visible.

  1. Genera el proyecto con las dependencias de arriba y arráncalo sin escribir ninguna clase de configuración.
  2. Busca en el log de arranque la línea Using generated security password.
  3. Ejecuta curl -i http://localhost:8080/ y fíjate en el código de respuesta y en sus cabeceras.

¿Qué código devuelve la petición sin credenciales y qué cabecera te dice cómo autenticarte?

Pista

Busca una cabecera que empiece por WWW-.

Mostrar respuestaOcultar respuesta

Devuelve 401 Unauthorized con la cabecera WWW-Authenticate: Basic realm="Realm". Con solo añadir el starter de seguridad, Spring Boot protege todas las URLs, crea un usuario user con contraseña aleatoria y activa HTTP Basic y form login. Es secure by default: el framework empieza cerrado y eres tú quien abre.

Con curl -i -u user:<contraseña-del-log> http://localhost:8080/ pasarás la autenticación (y verás un 404, porque aún no hay ningún controlador: la seguridad ya te dejó pasar).