Repaso
English
Spring, JPA y Java WebIntermedioSPR-27

¿Qué hace Spring Security por defecto cuando solo añades el starter?

Opciones

  1. Nada: primero debes configurar cada regla tú
  2. Protege todos los endpoints, con una contraseña generada (Opción correcta)
  3. Cifra toda la base de datos con una clave por defecto
  4. Bloquea solo las peticiones POST y deja abiertas las GET

Respuesta

Protege todos los endpoints (formulario de login / HTTP Basic con una contraseña generada) hasta que definas tus propias reglas

Por qué

Añadir spring-boot-starter-security es "seguro por defecto": cada endpoint necesita autenticación, se crea un usuario por defecto user con una contraseña aleatoria impresa en el log, y la protección CSRF está activa para peticiones de navegador.

Luego defines un bean SecurityFilterChain para decir qué URLs son públicas, cómo se autentican los usuarios (JWT, OAuth2, formulario de login) y qué roles pueden hacer qué.

Guarda las contraseñas con hash mediante BCryptPasswordEncoder, nunca en texto plano.

@Bean
SecurityFilterChain chain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests(a -> a
            .requestMatchers("/public/**").permitAll()
            .requestMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated())
        .oauth2ResourceServer(o -> o.jwt(Customizer.withDefaults()));
    return http.build();
}

Recuerda

Spring Security: filter chain, primero authn y luego authz, BCrypt para contraseñas.

Términos clave

Practica esta pregunta en Repaso