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.
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.
Dos rutas, un mismo objetivo
Sección titulada «Dos rutas, un mismo objetivo»La guía tiene dos partes que se leen en orden:
- 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
- Parte 2Spring Security 7filtros, configuración, autenticación, credenciales, sesiones, autorización, JWT, OAuth2, microservicios, WebFlux, MFA, testing, producción
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.
La anatomía de una lección
Sección titulada «La anatomía de una lección»Todas las lecciones siguen la misma estructura, para que sepas qué esperar:
- Analogíael concepto en el mundo real
- Cómo funcionael mecanismo, con diagramas
- Códigosintaxis actual, comentada
- Trampaslo que sale mal en proyectos reales
- Mini labun reto con respuesta
Estos son los bloques que verás:
Código que explica su propio vocabulario
Sección titulada «Código que explica su propio vocabulario»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.
@Configuration@EnableWebSecurityclass 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.
Versiones de referencia
Sección titulada «Versiones de referencia»| Pieza | Versión | Nota |
|---|---|---|
| Java | 25 (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 Boot | 4.1.x | starters renombrados: spring-boot-starter-webmvc, spring-boot-starter-security-oauth2-resource-server… |
| Spring Security | 7.1.x | código verificado contra la API de la 7.1.2 |
| Spring Authorization Server | incluido en Spring Security 7 | ya no es un proyecto aparte |
El proyecto de ejemplo
Sección titulada «El proyecto de ejemplo»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:
logging.level.org.springframework.security=TRACEMini lab · 10 min
Prepara tu laboratorio
Objetivo: Tener un proyecto Spring Boot 4 con seguridad activa y el log de seguridad visible.
- Genera el proyecto con las dependencias de arriba y arráncalo sin escribir ninguna clase de configuración.
- Busca en el log de arranque la línea
Using generated security password. - 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).