Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Z1411_tyutterin_Yakov_KR

.pdf
Скачиваний:
0
Добавлен:
07.01.2025
Размер:
3.97 Mб
Скачать

Для представления API для работы с сервисом аутентификации – введен интерфейс, рисунок 13.

Рисунок 13 – Сервис аутентификации.

Его реализация представлена на рисунке 14.

Рисунок 14 – Имплементация сервиса аутентификации

В методе register дополнительно происходит проверка наличия пользователя с почтой, что передал пользователь, чтобы исключить дубли

(Хотя они исключены уже за счет наличия ограничения UNIQUE на уровне

21

таблицы БД). Как было оглашено ранее, пароль не хранится в чистом виде, а

шифруется без возможности дешифрования.

В методе login описана основная логика по авторизации. Первоначально происходит попытка загрузки пользователя из БД на основе переданной почты

(логина), после чего, если пользователь найден, с использованием метода matches проверяется корректность введенного пароля. Если данные корректны

– происходит аутентификация пользователя и генерация токена, по которому,

при последующих запросах, мы сможем идентифицировать пользователя нашей системы. Генерация токена происходит на основе алгоритма HS256 и

соли.

Соль (также модификатор входа хэш-функции) — строка входных данных, которая передаётся хеш-функции вместе с входным массивом данных

(прообразом) для вычисления хэша (образа).

Используется для:

— усложнения определения прообраза хэш-функции методом перебора по словарю возможных входных значений (прообразов); — скрытия факта использования одинаковых прообразов при использовании для них разной соли.

Различают:

— статическую соль (используемую для всех входных значений); —

динамическую соль (генерируемую для каждого входного значения).

Соль и заголовок, в котором мы будем ожидать токен – указан в файле конфигурации. Также описано время жизни токена на случай, если пользователь долго неактивен, рисунок 15.

Рисунок 15 – Конфигурирование безопасности

22

Основную роль в разграничении прав играет конфиг безопасности, где описаны правила доступа к отдельным эндпоинтам в зависимости от того,

аутентифицирован пользователь или нет, и, если да, то какую роль он имеет.

Рисунок 16 – Разграничение доступов.

В результате проделанной работы был разработан API интерфейс для взаимодействия с клиентским сервисом. На рисунках 17-18 представлены страницы аутентификации и регистрации.

Рисунок 17 – Страница регистрации

23

Рисунок 18 – Страница аутентификации

Дополнительно, на клиентской стороне заданы правила отображения стартовой страницы после входа в систему на основе полученной роли. При первой аутентификации, при вводе корректных данных, в локальное хранилище сохраняется токен, который затем будет подвязываться к каждому запросу к BackEnd по названию Authorization. Пользовательская страница и административная представлены на рисунках 19-20.

Рисунок 19 – Панель управления администратора

Рисунок 20 – Пользовательская панель

24

Так как с аутентификацией мы закончили, можно перейти к тем контроллерам, доступ к эндпоинтам которых доступен лишь аутентифицированным пользователям, но помним, что доступ к ним ограничивается за счет наличия ролевой модели.

Для упрощения ориентирования между ними, они были разделены на отдельные пакеты, рисунок 21.

Рисунок 21 – Разграничение по пакетам в зависимости от уровня доступа.

Теперь, когда пользователь аутентифицирован, получить информацию по нему достаточно легко из токена. На основе информации из нее мы можем отобразить его изображение в профиль и личную информацию, которую он указал при регистрации. Эндпоинты, отвечающие за это. Представлены на рисунке 22.

25

Рисунок 22 – Пользовательский контроллер

Также присутствует ранее неупомянутый метод updateImageProfile,

который отвечает за загрузку пользовательского изображения пользователя.

Результат отображения профиля для администратора и пользователя имеет один вид и представлен на рисунке 23.

Рисунок 23 – Профиль пользователя

Результат загрузки нового изображения представлен на рисунках 24-25.

26

Рисунок 24 – Результат загрузки

Рисунок 25 – Результат после автоматической перезагрузки страницы

Изображения сохраняются локально в директорию, указанную в файле конфигурации. Также там прописано стандартное изображение на случай,

если пользователь ничего не задаст. Все это представлено на рисунке 26.

Рисунок 26 – Изображение пользователя

27

Пришло время добавить категории тестов. Начнем с административного контроллера, который будет содержать эндпоинты создания, удаления,

обновления. Путь берется от /api/admin, поэтому доступ к нему будет лишь у администратора портала. Реализация контроллера представлена на рисунке 27.

Рисунок 27 – Административный контроллер управления категориями

Так же, для того чтобы пользователь мог получить информацию о всех доступных категорий, либо же о конкретной, необходимо добавить пользовательский контроллер. Его реализация представлена на рисунке 28.

28

Рисунок 28 – Пользовательский контроллер получения категорий(и).

Для преставления тела запроса и ответа были введены два класса-DTO. Они представлены на рисунках 29-30.

Рисунок 29 – Класс для представления тела запроса

29

Рисунок 30 – Класс для представления тела ответа

Для трансформации DTO в класс-сущность и обратно, введены мапперы.

За счет использования фреймворка MapStruct, добавление маппера становится достаточно легкой задачей. В большинстве случаев для описания логики маппинга не требуется более число затрат, чем от создания интерфейса и объявления нескольких методов. В результате, на этапе компиляции, с

использованием механизма Annotation Processing будут сгенерированы имплементации на основе декларативного описания. Объявление интерфейса и сгенерированная реализация представлены на рисунках 31-32.

Рисунок 31 – Объявление интерфейса

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]