Aula 13 - Autenticação com Spring Security 🔐
Nesta aula, vamos proteger nossa API contra acesso não autorizado usando o Spring Security, o módulo de segurança oficial do ecossistema Spring.
😊 O que é o Spring Security?
Spring Security é o framework responsável por autenticação (quem é você?) e autorização (o que você pode fazer?) em aplicações Spring Boot.
📊 Cadeia de Filtros de Segurança
graph LR
Req[Requisição] --> F1[Filtro de Autenticação]
F1 --> F2[Filtro de Autorização]
F2 --> Controller[Controller]
F1 -- Falha --> E1[401 Unauthorized]
F2 -- Falha --> E2[403 Forbidden] 🧠 Configurando a Segurança Básica
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/produtos/publico").permitAll()
.anyRequest().authenticated()
);
return http.build();
}
}
🧠 Armazenamento Seguro de Senhas
Important
Nunca guarde senhas em texto puro. O Spring Security fornece o BCryptPasswordEncoder, que aplica hash com salt automaticamente.
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
// Ao cadastrar:
String senhaCifrada = passwordEncoder.encode(senhaDigitada);
// Ao logar:
boolean senhaCorreta = passwordEncoder.matches(senhaDigitada, senhaCifrada);
🧠 401 x 403: A Diferença Importa
| Código | Significado |
|---|---|
| 401 Unauthorized | "Não sei quem você é" (não autenticado) |
| 403 Forbidden | "Sei quem você é, mas você não tem permissão" |
📝 Exercícios Progressivos
- Básico: Qual a diferença entre autenticação e autorização?
- Básico: Por que nunca devemos guardar senhas em texto puro?
- Intermediário: O que faz o
BCryptPasswordEncoder? - Intermediário: Qual a diferença prática entre um erro 401 e um erro 403?
- Desafio: Configure uma rota
/admin/**para exigir uma role específica (ADMIN) usandohasRole().
🚀 Mini-projeto: Adicione o Spring Security ao projeto, configure o BCryptPasswordEncoder, e proteja o endpoint POST /produtos para exigir autenticação.