¿Qué hace Spring Security por defecto cuando solo añades el starter?
Opciones
- Nada: primero debes configurar cada regla tú
- Protege todos los endpoints, con una contraseña generada (Opción correcta)
- Cifra toda la base de datos con una clave por defecto
- 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.