Autorização e Autenticação em Java: Spring Security e JWT

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Autorização e Autenticação em Java: guia completo com exemplos



No desenvolvimento web moderno, a segurança da aplicação é um dos aspectos-chave. No ecossistema Java, existem várias ferramentas consolidadas para implementar autenticação (verificação da identidade do usuário) e autorização (verificação de permissões de acesso). Neste artigo, abordaremos detalhadamente as bibliotecas e abordagens que ajudarão você a proteger sua aplicação.



Conceitos básicos

Antes de passarmos para as ferramentas, é importante diferenciar dois conceitos:

  • Autenticação — processo de verificar se o usuário é quem diz ser (por exemplo, login e senha).
  • Autorização — determinação de quais recursos ou ações estão disponíveis para o usuário autenticado.


Spring Security — padrão da indústria

Spring Security é um framework poderoso para garantir segurança em aplicações Java, especialmente em conjunto com Spring Boot. Ele fornece mecanismos prontos para autenticação via formulário, HTTP Basic, OAuth2, LDAP e muitos outros.

Principais funcionalidades:

  • Configuração flexível de cadeias de filtros de segurança.
  • Suporte a sessões e tokens JWT.
  • Proteção contra ataques CSRF, XSS, Clickjacking.
  • Integração com bancos de dados para armazenamento de usuários.


Exemplo de configuração básica do Spring Security usando JWT:

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@EnableWebSecuritypublic class SecurityConfig {

@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeHttpRequests(authz -> authz .requestMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() ) .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); }}


JWT (JSON Web Token) — autorização contínua

JWT é uma forma compacta e autossuficiente de transmitir dados no formato JSON entre partes. Em Java, a biblioteca io.jsonwebtoken:jjwt é frequentemente usada para trabalhar com JWT.

Princípio de funcionamento:

  1. O usuário envia login/senha.
  2. O servidor verifica os dados e retorna um token JWT.
  3. O cliente armazena o token (por exemplo, no localStorage) e o envia no cabeçalho Authorization: Bearer <token>.
  4. O servidor verifica a assinatura do token e extrai os dados (papéis, identificador).


Exemplo de geração de JWT em Java:

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import java.security.Key;import java.util.Date;

public class JwtUtil { private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);

public static String generateToken(String username, String role) { return Jwts.builder() .setSubject(username) .claim("role", role) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1 hora .signWith(SECRET_KEY) .compact(); }}


OAuth2 e Spring

Recommendations