Autorização e autenticação em Java: guia completo

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: conceitos principais e ferramentas



Autenticação e autorização são dois pilares fundamentais da segurança de qualquer aplicação web. No ecossistema Java, existem diversas bibliotecas e frameworks maduros para essas tarefas. Neste artigo, abordaremos detalhadamente as principais ferramentas, suas características e forneceremos exemplos práticos de código.



1. Conceitos básicos

Antes de passarmos para as ferramentas, é importante distinguir claramente os termos:

  • Autenticação — verificação da identidade do usuário (quem é você?). Geralmente é feita por meio de login/senha, tokens ou biometria.
  • Autorização — verificação dos direitos de acesso (o que é permitido a você?). Determina se o usuário pode executar determinadas ações.


2. Spring Security — padrão de facto

Spring Security é o framework mais popular para garantir segurança em aplicações Java. Ele oferece uma solução abrangente tanto para autenticação quanto para autorização.



2.1. Configuração básica de autenticação

Para adicionar Spring Security, inclua a dependência no pom.xml:

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-security</artifactId></dependency>


Configuração mínima com autenticação in-memory:

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.core.userdetails.User;import org.springframework.security.core.userdetails.UserDetails;import org.springframework.security.provisioning.InMemoryUserDetailsManager;import org.springframework.security.web.SecurityFilterChain;

@Configurationpublic class SecurityConfig {

@Bean public InMemoryUserDetailsManager userDetailsManager() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); }

@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(authz -> authz .requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasRole("USER") .anyRequest().authenticated() ) .formLogin(login -> login.defaultSuccessUrl("/home")) .httpBasic(); return http.build(); }}


3. JWT (JSON Web Tokens) para autenticação stateless

JWT permite implementar autenticação sem manter estado no servidor. O token contém todas as informações necessárias sobre o usuário e é assinado com uma chave secreta.



3.1. Geração de JWT com a biblioteca jjwt

Adicione a dependência:

<dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-api</artifactId>    <version>0.12.5</version></dependency>


Exemplo de criação e verificação de token:

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import javax.crypto.SecretKey;import java.util.Date;

public class JwtUtil {

private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256); private static final long EXPIRATION_TIME = 3600000; // 1 hora

public static String generateToken(String username) { return Jwts.builder() .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTi

Recommendations