JobSearch — это полнофункциональное веб-приложение для поиска работы, созданное на основе Spring Boot. Проект реализует функционал, аналогичный HeadHunter, предоставляя платформу для взаимодействия соискателей и работодателей.
- Двухролевая система: соискатели (employee) и работодатели (employer)
- Безопасный вход: Spring Security с BCrypt шифрованием паролей
- Remember Me функциональность: автоматическое запоминание пользователя с использованием JDBC Token Repository
- Валидация данных: комплексная проверка входных данных
- Многоязычность: поддержка русского и английского языков
- Управление личным профилем (редактирование данных, загрузка аватара)
- Создание и управление резюме с модульной структурой:
- Основная информация (название, зарплата)
- Контактные данные (Telegram, email, телефон, LinkedIn, Facebook)
- Опыт работы (должность, компания, обязанности, годы работы)
- Образование (степень, учебное заведение, программа, даты)
- Публикация/снятие с публикации резюме
- Отклик на вакансии
- Чат с работодателями
- Управление профилем компании
- Создание и управление вакансиями:
- Основная информация (название, описание, зарплата)
- Требуемый опыт работы
- Категория вакансии
- Просмотр откликов на вакансии
- Публикация/снятие с публикации вакансий
- Чат с соискателями
- Поиск вакансий с фильтрацией и сортировкой
- Поиск резюме по категориям
- Живой поиск (Live Search)
- Пагинация результатов
- Детальный просмотр вакансий и резюме
- Реальное время обмена сообщениями между соискателями и работодателями
- История переписки
- Уведомления о новых сообщениях
- Java 21 - современная версия Java
- Spring Boot 3.2.3 - основной фреймворк
- Spring Security - безопасность приложения
- Spring Data JPA - работа с базой данных
- Hibernate 6.5.0 - ORM фреймворк
- Spring Validation - валидация данных
- Spring Boot Mail - отправка email уведомлений
- H2 Database - встраиваемая база данных для разработки и тестирования
- Liquibase 4.26.0 - миграции базы данных
- JDBC для работы с Remember Me токенами
- Thymeleaf - серверный шаблонизатор (частично)
- FreeMarker - основной шаблонизатор
- Bootstrap 5 - CSS фреймворк
- JavaScript - интерактивность
- HTML5/CSS3 - разметка и стилизация
- SpringDoc OpenAPI 2.4.0 - автогенерация Swagger документации
- Swagger UI - интерфейс для тестирования API
- Lombok - уменьшение boilerplate кода
- Jakarta Validation - валидация данных
- BCrypt шифрование паролей
- Remember Me функциональность с использованием JDBC Token Repository
- CSRF защита для всех форм
- Роль-основанный доступ (Role-based access control)
- Session управление с настраиваемым временем жизни
RedirectIfAuthenticatedFilter- перенаправление аутентифицированных пользователей- Настройка доступа к эндпоинтам по ролям
- Защита API эндпоинтов
- Пользователи (
users) - основная информация о пользователях - Роли (
authorities) - роли пользователей в системе - Вакансии (
vacancies) - информация о вакансиях - Резюме (
resumes) - информация о резюме - Категории (
categories) - категории вакансий и резюме - Сообщения (
messages) - система чата - Отклики (
responded_applicants) - связь соискателей и вакансий - Токены Remember Me (
persistent_logins) - для функции "Запомнить меня"
- Валидация схемы:
ddl-auto: validate - Lazy loading для оптимизации запросов
- Правильные связи между сущностями (OneToMany, ManyToOne, ManyToMany)
- Кастомные репозитории с производительными запросами
- Структурированные миграции в
db/changelog/ - Инициализация тестовых данных
- Версионирование изменений схемы базы данных
- Автоматическое применение миграций при запуске
# Многоэтапная сборка
FROM maven:3.9.8-amazoncorretto-21 AS build
WORKDIR /build
COPY src ./src
COPY pom.xml ./
RUN mvn clean package -e -DskipTests
FROM amazoncorretto:21
WORKDIR /app
COPY --from=build /build/target/HT-49*jar ./ht-49.jar
EXPOSE 8089
CMD ["java","-jar","ht-49.jar"]- Многоэтапная сборка - оптимизация размера образа
- Amazon Corretto 21 - надежная JVM
- Автоматическая сборка с Maven
- Порт 8089 для доступа к приложению
/api/users/**- управление пользователями/api/vacancies/**- работа с вакансиями/api/resumes/**- работа с резюме/api/responses/**- система откликов/api/message/**- чат система
- Pagination для больших списков данных
- Filtering и Sorting возможности
- Валидация всех входящих данных
- RESTful дизайн с правильными HTTP кодами
- JSON формат данных
- Русский (по умолчанию) -
messages_ru.properties - Английский -
messages_en.properties - Переключение языков через параметр
?lang=en/ru
- Все пользовательские сообщения
- Формы валидации
- Навигация и интерфейс
- Динамическое переключение без перезагрузки сессии
- Spring Security DEBUG режим для разработки
- Файловое логирование в
logs/spring.log - Конфигурируемые уровни логирования
- Глобальная обработка исключений с логированием
-
Требования:
- Java 21+
- Maven 3.6+
-
Клонирование и запуск:
git clone [repository-url]
cd HT-49
mvn spring-boot:run- Доступ к приложению:
- Веб-интерфейс:
http://localhost:8080 - H2 Console:
http://localhost:8080/h2-console - Swagger UI:
http://localhost:8080/swagger-ui.html
- Веб-интерфейс:
# Сборка образа
docker build -t jobsearch-app .
# Запуск контейнера
docker run -p 8089:8089 jobsearch-appПо умолчанию используется H2 Database с настройками:
- URL:
jdbc:h2:./db/Job_Search;AUTO_SERVER=true - Username:
root - Password:
troot2191020 - Console доступ: отключен в production
src/main/java/kg/attractor/ht49/
├── config/ # Конфигурационные классы
│ ├── SecurityConfig.java # Настройки безопасности
│ ├── AppConfig.java # Общие настройки приложения
│ ├── LocalConfig.java # Интернационализация
│ └── SwaggerConfig.java # Настройка Swagger
├── controllers/ # REST и MVC контроллеры
│ ├── mvc/ # Thymeleaf/FreeMarker контроллеры
│ └── rest/ # REST API контроллеры
├── dto/ # Data Transfer Objects
├── models/ # JPA сущности
├── services/ # Бизнес-логика
├── repositories/ # Репозитории данных
└── exceptions/ # Обработка исключений
src/main/resources/
├── db/changelog/ # Liquibase миграции
├── templates/ # FreeMarker шаблоны
├── static/ # CSS, JS, изображения
├── messages*.properties # Файлы локализации
└── application.yaml # Конфигурация приложения
В системе предустановлены тестовые пользователи (пароли в миграции 008_add_data.sql):
- john.doe@example.com / пароль:
qwe - johny@example.com / пароль:
qwerty - sina@example.com / пароль:
qwerty
- michael.johnson@example.com / пароль:
password123 - jane.smith@example.com / пароль:
password456 - peter.wilson@example.com / пароль:
qwe
- Использование JDBC Token Repository для безопасного хранения токенов
- Настраиваемое время жизни токенов (2 дня)
- Автоматическая очистка истекших токенов
- Динамическое добавление секций опыта работы и образования
- Гибкая система контактов с различными типами
- Валидация взаимосвязанных полей
- Полная локализация интерфейса
- Сохранение выбранного языка в сессии
- Unicode поддержка для корректного отображения
- Мгновенный обмен сообщениями
- Связывание чатов с откликами на вакансии
- История переписки с временными метками
- Многоуровневая защита с ролевой моделью
- CSRF защита для всех форм
- Кастомные фильтры безопасности
- Lazy loading для производительности
- Эффективные запросы с пагинацией
- Proper entity relationships
- Многоэтапная сборка для оптимизации
- Безопасные базовые образы
- Конфигурация для масштабирования
Полное техническое задание доступно по ссылке: Техническое задание
- API документация: доступна в Swagger UI после запуска приложения
- Схема базы данных: описана в Liquibase миграциях
- Конфигурация: детально прописана в
application.yaml
Этот проект демонстрирует современные подходы к разработке веб-приложений с использованием Spring Boot экосистемы, включая безопасность, базы данных, контейнеризацию и лучшие практики разработки.