🧩 Exercícios: Spring Security 6 Architecture e SecurityFilterChain
Spec Backend Com Java E Springboot • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 09.1 — Configuração de SecurityFilterChain com Lambda DSL
Contexto: Configuração de SecurityFilterChain com Lambda DSL no contexto de Spring Security 6 Architecture e SecurityFilterChain.
Requisitos de Execução:
- Declarar bean
SecurityFilterChaindesabilitando CSRF em APIs stateless e liberando/actuator/health.
Resultado Esperado
SecurityFilterChain configurada com Spring Security 6 Lambda DSL.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_1_SeuNome - Envie na tarefa:
Atividade Cap 09 - Spring Security 6 Architecture e SecurityFilterChain
🔑 Gabarito de Código & Solução Comentada
// SecurityConfig.java
package com.empresa.api.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.csrf(csrf -> csrf.disable())
.sessionManagement(s -> s.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/v1/auth/**", "/actuator/health").permitAll()
.anyRequest().authenticated()
)
.build();
}
}
🔍 Nível 2: Prática
Problema 09.2 — Codificação de Senhas com BCryptPasswordEncoder
Contexto: Codificação de Senhas com BCryptPasswordEncoder no contexto de Spring Security 6 Architecture e SecurityFilterChain.
Requisitos de Execução:
- Declarar bean
PasswordEncodercom 12 rounds de custo computacional.
Resultado Esperado
Hash BCrypt gerado com salt dinâmico e comparado com segurança.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_2_SeuNome - Envie na tarefa:
Atividade Cap 09 - Spring Security 6 Architecture e SecurityFilterChain
🔑 Gabarito de Código & Solução Comentada
// PasswordEncoderConfig.java
package com.empresa.api.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class PasswordEncoderConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12);
}
}
⚡ Nível 3: Integração
Problema 09.3 — Tratamento de Exceções de Segurança (AuthenticationEntryPoint)
Contexto: Tratamento de Exceções de Segurança (AuthenticationEntryPoint) no contexto de Spring Security 6 Architecture e SecurityFilterChain.
Requisitos de Execução:
- Customizar
AuthenticationEntryPointeAccessDeniedHandlerpara retornar JSON de erro em vez de redirecionar para tela de login.
Resultado Esperado
Erro 401 Unauthorized retornado em JSON com mensagem padronizada.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_3_SeuNome - Envie na tarefa:
Atividade Cap 09 - Spring Security 6 Architecture e SecurityFilterChain
🔑 Gabarito de Código & Solução Comentada
// CustomAuthEntryPoint.java
package com.empresa.api.security;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class CustomAuthEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException {
response.setContentType("application/json");
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().write("{\"erro\": \"Não autorizado\"}");
}
}
🏆 Nível 4: Desafio Corporativo
Problema 09.4 — Autenticação Customizada com AuthenticationProvider
Contexto: Autenticação Customizada com AuthenticationProvider no contexto de Spring Security 6 Architecture e SecurityFilterChain.
Requisitos de Execução:
- Implementar
AuthenticationProvidercustomizado integrando autenticação multifator (MFA/2FA).
Resultado Esperado
Provedor de autenticação com validação de token OTP aprovado.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_4_SeuNome - Envie na tarefa:
Atividade Cap 09 - Spring Security 6 Architecture e SecurityFilterChain
🔑 Gabarito de Código & Solução Comentada
// MfaAuthenticationProvider.java
package com.empresa.api.security;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Component;
@Component
public class MfaAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication auth) throws AuthenticationException {
return auth; // Validação de segundo fator
}
@Override
public boolean supports(Class<?> auth) { return true; }
}