Aplicação de chat em tempo real desenvolvida com Java Spring Boot e WebSocket/STOMP, com autenticação via JWT armazenado em cookie HttpOnly.
🔗 Frontend: WebChat-Frontend — React + Vite
Backend:
- Java 17
- Spring Boot
- Spring Security + JWT (Auth0)
- WebSocket + STOMP
- PostgreSQL
- Hibernate / Spring Data JPA
- Lombok
Frontend:
- React + Vite
- @stomp/stompjs
- Axios
- React Router DOM
O projeto utiliza arquitetura em camadas (MVC monolítico):
Controller → Service → Repository → Banco de Dados
Entidades:
User— usuário da plataforma, implementaUserDetailsFriendship— relação de amizade entre dois usuários (status: PENDING, ACCEPTED)Group— grupo de conversa criado por um usuárioGroupMember— relação N:N entre usuários e gruposConversation— conversa direta (DM) entre dois usuáriosGroupMessage— mensagens enviadas em gruposDirectMessage— mensagens enviadas em conversas diretas
- ✅ Registro e login com JWT em cookie HttpOnly
- ✅ Envio e aceitação de pedidos de amizade
- ✅ Criação e gerenciamento de grupos
- ✅ Chat em tempo real via WebSocket/STOMP
- ✅ Mensagens diretas (DM) entre usuários
- ✅ Mensagens de grupo com broadcast
- ✅ Autenticação no handshake WebSocket via cookie
- Java 17+
- PostgreSQL
- Node.js (para o frontend)
- Cria o banco de dados:
CREATE DATABASE chatweb;- Configura as variáveis de ambiente:
DB_USERNAME=postgres
DB_PASSWORD=sua_senha
JWT_SECRET=sua_secret_longa
- Sobe o projeto:
./mvnw spring-boot:runO backend sobe em http://localhost:8080.
- Clona o repositório do frontend:
git clone https://github.com/joao2dev/WebChat-Frontend
cd WebChat-Frontend
npm install
npm run devO frontend sobe em http://localhost:5173.
A documentação completa das rotas REST e WebSocket está em API_DOCS.md.
Base URL: http://localhost:8080
WebSocket: ws://localhost:8080/ws
src/main/java/com/example/chatweb/
├── Config/
│ ├── SecurityConfig.java
│ ├── SecurityFilter.java
│ ├── TokenService.java
│ ├── UserDetailsServiceImpl.java
│ ├── JWTUserData.java
│ └── CookieHandshakeInterceptor.java (via webscoket/)
├── controller/
│ ├── AuthController.java
│ ├── UserController.java
│ ├── FriendshipController.java
│ ├── GroupController.java
│ ├── GroupMemberController.java
│ ├── ConversationController.java
│ ├── GroupMessageController.java
│ └── DirectMessageController.java
├── Service/
│ ├── UserService.java
│ ├── FriendshipService.java
│ ├── GroupService.java
│ ├── GroupMemberService.java
│ ├── ConversationService.java
│ ├── GroupMessageService.java
│ └── DirectMessageService.java
├── repositories/
├── entity/
├── dto/
└── webscoket/
├── WebSocketConfig.java
├── ChatController.java
├── ChatChannelInterceptor.java
└── CookieHandshakeInterceptor.java
O projeto utiliza TDD com JUnit 5 e Mockito. Os testes cobrem os Services com cenários de sucesso e erro.
./mvnw testMIT

