{"id":25317286,"url":"https://github.com/felipesouzacunha/spring-security-api-jwt-oauth2","last_synced_at":"2026-04-09T01:32:13.355Z","repository":{"id":277252422,"uuid":"931823882","full_name":"Felipesouzacunha/Spring-Security-API-JWT-OAuth2","owner":"Felipesouzacunha","description":"Este projeto implementa autenticação e autorização usando Spring Security, JWT e OAuth2, permitindo o gerenciamento de usuários, autenticação via token JWT e controle de acesso baseado em roles.","archived":false,"fork":false,"pushed_at":"2025-02-13T02:02:58.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T17:14:02.568Z","etag":null,"topics":["docker","docker-compose","java","maven","oath2","spring-boot","spring-security"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Felipesouzacunha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-12T23:06:32.000Z","updated_at":"2025-02-13T02:03:01.000Z","dependencies_parsed_at":"2025-06-25T21:35:46.763Z","dependency_job_id":null,"html_url":"https://github.com/Felipesouzacunha/Spring-Security-API-JWT-OAuth2","commit_stats":null,"previous_names":["felipesouzacunha/spring-security-api-jwt-oauth2"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Felipesouzacunha/Spring-Security-API-JWT-OAuth2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Felipesouzacunha%2FSpring-Security-API-JWT-OAuth2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Felipesouzacunha%2FSpring-Security-API-JWT-OAuth2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Felipesouzacunha%2FSpring-Security-API-JWT-OAuth2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Felipesouzacunha%2FSpring-Security-API-JWT-OAuth2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Felipesouzacunha","download_url":"https://codeload.github.com/Felipesouzacunha/Spring-Security-API-JWT-OAuth2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Felipesouzacunha%2FSpring-Security-API-JWT-OAuth2/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261958081,"owners_count":23236397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","java","maven","oath2","spring-boot","spring-security"],"created_at":"2025-02-13T19:25:13.737Z","updated_at":"2025-12-30T21:41:48.400Z","avatar_url":"https://github.com/Felipesouzacunha.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Security API\n\nEste projeto implementa autenticação e autorização usando Spring Security, JWT e OAuth2, permitindo o gerenciamento de usuários, autenticação via token JWT e controle de acesso baseado em roles. O sistema foi projetado para garantir segurança, escalabilidade e fácil manutenção, tornando-o adequado para aplicações empresariais e projetos pessoais. Além disso, oferece suporte para múltiplas configurações de autenticação e pode ser facilmente adaptado para diferentes cenários de segurança, atendendo desde pequenas aplicações a sistemas complexos de grande escala.\n\n## Tecnologias Utilizadas\n- Java 21\n- Spring Boot 3\n- Spring Security\n- OAuth2\n- JWT (JSON Web Token)\n- MySQL\n- Docker\n- Maven\n- Hibernate\n- Postman (para testes de API)\n- OpenSSL (para geração de chaves de segurança)\n\n## Configuração do Ambiente\n\n### Requisitos\nPara executar este projeto, você precisará dos seguintes requisitos instalados em sua máquina:\n- Docker e Docker Compose instalados\n- JDK 21+\n- Maven 3+\n- MySQL Client (opcional para administração do banco de dados)\n- Postman ou cURL para testes de endpoints\n- OpenSSL para geração de chaves de segurança\n\n### Subindo o Banco de Dados\nO projeto utiliza um banco de dados MySQL em um contêiner Docker. Para iniciá-lo, execute:\n```sh\ndocker-compose up -d\n```\nIsso criará e executará um contêiner MySQL configurado automaticamente. Caso seja necessário derrubar o contêiner posteriormente, utilize:\n```sh\ndocker-compose down\n```\nSe precisar limpar os volumes do banco de dados, utilize:\n```sh\ndocker-compose down -v\n```\n\n### Configuração do Banco de Dados (Docker Compose)\n```yaml\nservices:\n  mysql:\n    image: mysql:8\n    container_name: mysql-container\n    restart: always\n    ports:\n      - \"3307:3306\"\n    expose:\n      - \"3307\"\n    environment:\n      MYSQL_USER: admin\n      MYSQL_PASSWORD: 123\n      MYSQL_DATABASE: mydb\n      MYSQL_ROOT_PASSWORD: 123\n```\nAlém disso, certifique-se de que a conexão com o banco está correta no `application.properties`:\n```properties\nspring.datasource.url=jdbc:mysql://localhost:3307/mydb\nspring.datasource.username=admin\nspring.datasource.password=123\nspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver\nspring.jpa.hibernate.ddl-auto=update\n```\n\n### Configuração do JWT\nAdicione as chaves RSA no `application.properties` ou `application.yml` para garantir a correta geração e validação dos tokens JWT.\n```yaml\nspring:\n  security:\n    oauth2:\n      resourceserver:\n        jwt:\n          issuer-uri: http://localhost:8081/realms/my-realm\njwt:\n  public.key: classpath:public.pem\n  private.key: classpath:private.pem\n```\nAs chaves RSA podem ser geradas utilizando OpenSSL:\n```sh\nopenssl genrsa -out private.pem 2048\nopenssl rsa -in private.pem -pubout -out public.pem\n```\nColoque esses arquivos na pasta `resources` do projeto.\n\n## Executando a Aplicação\nPara rodar o projeto, utilize o Maven:\n```sh\nmvn spring-boot:run\n```\nCaso queira construir um JAR e executar manualmente:\n```sh\nmvn clean package\njava -jar target/spring-security-api.jar\n```\nSe precisar rodar testes automatizados antes de subir a aplicação:\n```sh\nmvn verify\n```\n\n## Endpoints\nA API conta com os seguintes endpoints para manipulação de usuários e tweets:\n\n### Autenticação\n- `POST /login` - Gera um token JWT para autenticação.\n\n### Usuários\n- `POST /users` - Cria um novo usuário.\n- `GET /users` - Lista todos os usuários (somente para ADMIN).\n\n### Tweets\n- `POST /tweets` - Cria um novo tweet (usuário autenticado).\n- `GET /feed` - Obtém o feed de tweets em paginação.\n- `DELETE /tweets/{id}` - Remove um tweet (autor do tweet ou ADMIN).\n\n## Estrutura do Projeto\nO código está estruturado de forma modular, garantindo a organização e a fácil manutenção:\n```\n/src/main/java/tech/buildrun/springsecurity\n├── config\n│   ├── AdminUserConfig.java\n│   ├── SecurityConfig.java\n├── controller\n│   ├── TokenController.java\n│   ├── TweetController.java\n│   ├── UserController.java\n│   ├── dto\n│   │   ├── CreateTweetDto.java\n│   │   ├── CreateUserDto.java\n│   │   ├── FeedDto.java\n│   │   ├── FeedItemDto.java\n│   │   ├── LoginRequest.java\n│   │   ├── LoginResponse.java\n├── entities\n│   ├── Role.java\n│   ├── Tweet.java\n│   ├── User.java\n├── repository\n│   ├── RoleRepository.java\n│   ├── TweetRepository.java\n│   ├── UserRepository.java\n```\n\n## Testes\nOs testes unitários e de integração são essenciais para garantir a confiabilidade do sistema. Utilize JUnit para rodá-los:\n```sh\nmvn test\n```\nAlém disso, recomenda-se o uso do Postman ou cURL para testar os endpoints manualmente.\n\n## Notas\n- Para ambiente de produção, habilite a proteção CSRF no `SecurityConfig`.\n- Utilize variáveis de ambiente para armazenar credenciais sensíveis.\n\n## Autor\nProjeto desenvolvido por Felipe(https://github.com/Felipesouzacunha).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipesouzacunha%2Fspring-security-api-jwt-oauth2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelipesouzacunha%2Fspring-security-api-jwt-oauth2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipesouzacunha%2Fspring-security-api-jwt-oauth2/lists"}