Полное руководство по аутентификации с помощью токена Jwt на Java
В данной статье мы поговорим о том, как реализовать аутентификацию с помощью токена Jwt на Java.
Предварительные условия:Базовые знания о том, как взаимодействует клиент-сервер, цикл запрос-ответ.
В этой статье я собираюсь предоставить потрясающее руководство по работе с Authentication Manager на Java.
Итак, первый вопрос, который может возникнуть в процессе, заключается в том,что такое Authentication Manager?
Authentication Manager является фундаментальной основой для процесса аутентификации Spring security. AuthenticationManager - это API, который определяет, как должны работать фильтры Spring Security.
Относительные зависимости, которые нам нужны для интеграции аутентификации с Spring boot:
Структура папок для безопасности System будет выглядеть следующим образом :
controller - Предоставляет обработчики для любого входящего запроса.
RequestFormat - Спецификаторы формата поля данных для входа в систему, запроса на регистрацию.
ResponseFormat - Ответы на запросы аутентификации на стороне сервера.
Security
Models
Repository
SecurityServices
Давайте создадим файл User.java в Package :Models:
Давайте сопоставим созданный выше класс модели с репозиторием для работы с JpaRepository (JPA= Java Persistence API ) :
Теперь мы создадим 2 файла UserDetailsServiceImpl.java и UserDetailsService.java, которые будут выполнять все операции, связанные с пользователем.
Теперь, когда мы уже готовы с основной функциональной частью, мы можем перейти к работе с Controller и частями Request,Response Format.
Для целей обучения мы создадим 2 отдельных Controller-файла:
1. AuthController.java
2. UserController.java
Конечные точки, которые мы будем предоставлять в AuthController, не должны быть отключены ни для какого разрешения. Но для того, чтобы UserController выполнял любой запрос и извлекал данные, он должен запрашивать учётные данные для аутентификации.
Итак, если вы внимательно следили, мы определили свойства маршрутизации в файле SecurityConfig. В нём указано, что конечная точка всегда должна быть разрешена, поскольку для входа в приложение пользователь должен пройти процесс аутентификации, верно? Таким образом, шаблон (/api/auth/**) должен быть разрешён для любого суффиксного дерева. Но для api / test, который специфичен для UserController, он всегда должен быть аутентифицирован, поскольку это то, где мы на самом деле будем пытаться извлечь или обновить любые данные, относящиеся к пользователю.
Теперь давайте подготовим Request ,Response formats.Создайте 2 файла внутри пакета RequestFormat:
1. LoginRequest.java
2. SignUpRequest.java
В этих файлах будет указано, что мы на самом деле ожидаем от пользователя в качестве входных данных, которые будут работать для их истинной аутентификации и позволят им быстро войти в приложение.
Таким же образом у нас будет DTO и для Response Formats. Создайте эти файлы внутри ResponseFormats:
AuthController.java
Он будет обрабатывать все конечные точки api тестирования, которые выполняют операции, специфичные для пользователя.Он использует JwtUtils и PasswordEncoder. PasswordEncoder помогает нам хранить пароль, закодированный с помощью стандартизированного механизма. @ CrossOrigin указывает совместное использование ресурсов из разных источников и в нём указано, что любой входящий запрос из любого источника не должен блокироваться.
UserController.Java
Здесь мы не выполняем никаких специальных операций. Мы просто хотим ограничить маршрут, чтобы он был доступен только в том случае, если пользователь успешно прошёл аутентификацию
Итак, всё!Теперь вы готовы протестировать данную технологию! Если вы всё будете делать шаг за шагом, у вас должно получиться!
Статья была взята из этого иисточника: