Надежная, безопасная и масштабируемая платформа для приватного обмена файлами, разработанная для организаций, которым требуется детализированный контроль доступа, управление пользователями и бесшовные уведомления. Построена на основе микросервисной архитектуры для обеспечения высокой доступности, легкого масштабирования и удобной поддержки кода. Будь то работа с конфиденциальными документами или совместными файлами, приложение предоставляет ролевой доступ, аутентификацию через JWT и событийно-ориентированные уведомления.
- Управление пользователями: Регистрация, аутентификация и управление пользователями с ролями (admin, pro, default). Администраторы могут создавать, обновлять или удалять пользователей.
- Управление файлами: Загрузка, получение, изменение уровня доступа и удаление файлов (поддержка PDF, Word и т.д.). Доступ регулируется уровнями (default, pro, admin).
- Безопасная аутентификация: Логин на основе JWT с хешированием паролей и ролевым управлением доступом (RBAC).
- Уведомления: Уведомления пользователей в реальном времени через Kafka для событий, таких как передача файлов или обновления.
- API-шлюз: Централизованная точка входа для всех запросов, обеспечивающая маршрутизацию, CORS и балансировку нагрузки.
- Масштабируемость: Микросервисная архитектура позволяет независимо масштабировать сервисы для пользователей и файлов.
Проект использует современные технологии промышленного уровня для обеспечения производительности, безопасности и удобства для разработчиков. Основной акцент сделан на экосистему Java для надежности бэкенда и асинхронный обмен сообщениями для слабосвязанных сервисов.
Проект построен на микросервисной архитектуре для модульности и изоляции ошибок. Фронтенд взаимодействует только с API-шлюзом, который маршрутизирует запросы к специализированным сервисам. Операции, связанные с пользователями, могут инициировать уведомления через Kafka для разделения ответственности.
graph TD
A[Фронтенд] -->|HTTP-запросы| B[API-шлюз]
B -->|Маршруты /users/*| C[Микросервис пользователей]
B -->|Маршруты /files/*| D[Микросервис файлов]
C -->|Отправляет события| E[Kafka-брокер]
E -->|Потребляет топики| F[Сервис уведомлений]
C <-->|Запросы к БД| G[База данных]
D <-->|Запросы к БД| G
Эта схема показывает поток запросов и событийно-ориентированное взаимодействие. API-шлюз выступает единой точкой входа, повышая безопасность и упрощая интеграцию с клиентом.
- Фронтенд отправляет HTTP-запросы (например, логин, загрузка файла) на API-шлюз.
- API-шлюз аутентифицирует (через JWT) и перенаправляет запрос к соответствующему микросервису.
- Микросервис пользователей обрабатывает аутентификацию, CRUD-операции и отправляет события в Kafka для уведомлений.
- Микросервис файлов управляет операциями с файлами и их хранением.
- Сервис уведомлений потребляет Kafka-топики для отправки email или уведомлений в приложении.
Репозиторий организован как мультимодульный Maven-проект для удобного управления микросервисами:
- api-gateway/: Содержит конфигурацию Spring Cloud Gateway, правила маршрутизации и фильтры безопасности.
src/main/java: Контроллеры/фильтры для обработки запросов.application.yml: Конфигурация маршрутов (например, к сервисам пользователей и файлов).
-
Клонируйте репозиторий:
git clone https://github.com/vnikolaenko-dev/PrivateFileSharing.git cd PrivateFileSharing git checkout api-gateway -
Установите зависимости:
mvn clean install -
Настройте окружение:
- Обновите файлы
application.propertiesили.ymlв каждом модуле (например, URL базы данных, серверы Kafka). - Пример для микросервиса пользователей:
spring.datasource.url=jdbc:postgresql://localhost:5432/privatefiles spring.kafka.bootstrap-servers=localhost:9092
- Обновите файлы
-
Запустите сервисы:
- Запустите Kafka/Zookeeper (например, через Docker:
docker run -p 9092:9092 apache/kafka). - Запустите каждый микросервис:
mvn spring-boot:runв соответствующих директориях. - Или используйте Docker Compose для всех сервисов.
- Запустите Kafka/Zookeeper (например, через Docker:
-
Доступ к приложению:
- Фронтенд: Откройте
index.htmlили запустите локальный сервер. - API: Тестируйте конечные точки через Postman (например, POST /auth/login).
- Фронтенд: Откройте
