Pular para o conteúdo principal

Questão de Engenharia de Software — Frameworks — FGV 2025

Engenharia de SoftwareFrameworks
Código
fg107868
Banca
FGV
Órgão
CPRM
Ano
2025
Nível
Superior
Cargo
Analista em Geociências - Geoprocessamento
Uma equipe está desenvolvendo uma aplicação REST com Spring Boot e precisa garantir autenticação e autorização baseadas em tokens JWT. Durante o processo, é identificado que filtros padrão estão interferindo na validação dos tokens.A configuração mais apropriada para implementar autenticação JWT é
  1. Ausar @Secured diretamente nos controllers e delegar ao container.
  2. Bimplementar um Filter que extende UsernamePasswordAuthenticationFilter e configurá-lo com SecurityFilterChain.
  3. Caplicar @RolesAllowed e injetar um serviço de validação no controller.
  4. Ddefinir os tokens JWT no application.properties como trusted.
  5. Eremover o Spring Security e usar um filtro personalizado.
Revelar gabarito e comentário

GabaritoB — implementar um Filter que extende UsernamePasswordAuthenticationFilter e configurá-lo com SecurityFilterChain.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Autenticação JWT com Spring Boot

Gabarito: letra B. A implementação de autenticação JWT no Spring Boot requer a criação de um filtro personalizado que estenda UsernamePasswordAuthenticationFilter e sua adição ao SecurityFilterChain. Essa abordagem permite que a validação do token ocorra no ponto correto da cadeia de segurança, evitando interferências dos filtros padrão (como o de login por formulário).

A banca testa a capacidade de distinguir entre autenticação (verificação da identidade) e autorização (controle de acesso). Anotações como @Secured e @RolesAllowed são mecanismos de autorização, não implementam a lógica de validação de tokens JWT. O problema descrito no enunciado é que filtros padrão estão interferindo na validação – a solução correta é customizar a cadeia de filtros, e não remover o Spring Security ou usar configurações inexistentes.

  1. 1Criar filtro customizado (extends OncePerRequestFilter)
  2. 2Extrair token JWT do header Authorization
  3. 3Validar token (assinatura + expiração)
  4. 4Criar Authentication e inserir no SecurityContext
  5. 5Adicionar filtro ao SecurityFilterChain (addFilterBefore)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Usar @Secured diretamente nos controllers e delegar ao container. @Secured é uma anotação para autorização baseada em papéis, não realiza autenticação. A delegação ao container não implementa a validação de tokens JWT, apenas confia no container para autenticação, que não está configurada para JWT.

Alternativa B — ✅ Correta ⟵ GABARITO

Implementar um Filter que estende UsernamePasswordAuthenticationFilter e configurá-lo com SecurityFilterChain. No Spring Security, a autenticação JWT é tipicamente feita criando-se um filtro customizado (ex.: JwtAuthenticationFilter) que estende OncePerRequestFilter (ou UsernamePasswordAuthenticationFilter) e o adiciona à cadeia de filtros via HttpSecurity.addFilterBefore() ou addFilterAfter(). Isso garante que o token seja validado antes que a requisição alcance os controllers, substituindo a lógica de autenticação padrão.

Alternativa C — ❌ Incorreta

Aplicar @RolesAllowed e injetar um serviço de validação no controller. Novamente, @RolesAllowed é uma anotação de autorização, e injetar um serviço no controller para validar tokens não substitui a necessidade de um filtro na cadeia de segurança. A validação do token deve ocorrer antes de o controller ser invocado, o que exige a participação na cadeia de filtros.

Alternativa D — ❌ Incorreta

Definir os tokens JWT no application.properties como trusted. Não existe essa configuração no Spring Boot nem no Spring Security. Tokens JWT são fornecidos pelo cliente no cabeçalho Authorization: Bearer <token>, e sua validação é feita programaticamente, não via propriedades.

Alternativa E — ❌ Incorreta

Remover o Spring Security e usar um filtro personalizado. Remover o Spring Security eliminaria toda a infraestrutura de segurança (proteção CSRF, gerenciamento de sessão, etc.), obrigando a reimplementar muitas funcionalidades. A abordagem correta é integrar o filtro personalizado ao SecurityFilterChain existente, não descartar o framework.

NÃO CAIA NESSA!

A banca explora a confusão entre autenticação (verificar quem é o usuário) e autorização (o que ele pode fazer). Anotações como @Secured e @RolesAllowed são de autorização – elas não validam tokens JWT. O aluno que não domina a arquitetura de filtros do Spring Security pode cair na alternativa E, achando que remover o framework simplifica a solução. Na prática, o Spring Security foi feito para ser extensível: cria-se um filtro e o adiciona à cadeia.

PEGA ESSA DICA!

Em provas de Spring Security, lembre-se: autenticação é feita por filtros na cadeia (custom filters), autorização é feita por anotações ou regras no HttpSecurity. O padrão para JWT é: (1) criar um filtro que extrai o token do cabeçalho, (2) validá-lo e (3) colocar o Authentication no SecurityContextHolder. Configure-o com addFilterBefore() para que execute antes do filtro de login padrão.

Gabarito: letra B

Link permanente: /questoes/fg107868