Este projeto demonstra como configurar autenticação e autorização usando JWT (JSON Web Tokens) com Spring Boot e Spring Security. Ele fornece uma implementação básica de segurança JWT, onde endpoints estão protegidos e requerem autenticação para acesso. Um exemplo de usuário estático é usado para facilitar a compreensão, mas a estrutura pode ser facilmente adaptada para se conectar a um banco de dados em aplicações reais.
-
Configuração de Projeto com Spring Security:
- Criação de um projeto Spring Boot com Spring Security para autenticação baseada em JWT.
- Definição de endpoints protegidos que exigem autenticação via JWT.
-
Serviço de Usuário Personalizado:
- Customização de um serviço de detalhes de usuário para carregar usuários por nome de usuário.
- Configuração de um usuário estático para demonstração.
-
Autenticação Baseada em Credenciais:
- Implementação de autenticação básica por nome de usuário e senha.
- Integração do Spring Security para usar detalhes de usuário fornecidos por um serviço personalizado.
- Adição de codificador de senha para tratar senhas recebidas.
-
Geração e Validação de JWT:
- Criação de uma classe utilitária para gerar e validar JWTs.
- Métodos para extração de informações do token, incluindo nome de usuário, data de expiração e validação de token.
-
Implementação do Endpoint de Autenticação:
- Criação de um endpoint de autenticação para lidar com o login e fornecer um JWT em caso de sucesso.
- Configuração de Spring Security para permitir acesso não autenticado ao endpoint
/authenticate
.
-
Filtro de Autenticação JWT:
- Implementação de um filtro personalizado para interceptar requisições e validar o JWT presente no cabeçalho de autorização.
- Extração do token JWT, validação e definição de autenticação no contexto de segurança do Spring.
-
Configuração Stateless:
- Configuração do Spring Security para modo
stateless
, garantindo que o JWT seja validado em cada requisição, em vez de usar sessões.
- Configuração do Spring Security para modo
- Java 11+
- Spring Boot
- Dependências no
pom.xml
:- Spring Security
- JWT (JSON Web Token)
- Jax B API
-
Clone o Repositório:
git clone https://github.com/joaoalbertorsc/spring-security-jwt-test cd spring-security-jwt-test
-
Configure as Dependências:
- Certifique-se de que as dependências do Spring Security e JWT estão configuradas no
pom.xml
.
- Certifique-se de que as dependências do Spring Security e JWT estão configuradas no
-
Inicie a Aplicação:
- Execute a aplicação com o comando:
mvn spring-boot:run
- Execute a aplicação com o comando:
-
Autenticação:
- Envie uma requisição
POST
para o endpoint/authenticate
com nome de usuário e senha para obter o JWT. - Use o JWT retornado para autenticar suas requisições aos endpoints protegidos.
- Envie uma requisição
-
Teste o Endpoint Protegido:
- Acesse endpoints protegidos usando o JWT no cabeçalho de autorização.
- SecurityConfig: Configura as regras de segurança e os filtros JWT.
- JwtUtil: Classe para geração e validação de JWTs.
- JwtRequestFilter: Filtro para interceptar requisições e validar tokens.
- UserDetailsServiceImpl: Serviço para carregar detalhes do usuário.
- Endpoints:
/authenticate
: Endpoint público para geração de JWT.- Endpoints protegidos: Acessíveis apenas com um JWT válido.