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 Também na biblioteca
Swagger-PHP para PHP: guia completo com exemplos práticos
Framework CLI para JavaScript (Node.js): Commander.js – criação de aplicações de console
Filas de Tarefas em Java: ExecutorService e ThreadPoolExecutor
Monitoramento de aplicações PHP com PHPMetrics