Итак, в этом посте я расскажу о функции регистрации и входа пользователя, которая является общей для всех приложений, поэтому мы можем разработать отдельное приложение для регистрации и входа пользователя. Эта служба будет служить для аутентификации для всех других служб. В целях аутентификации мы будем использовать JSON Web Token (JWT). Подробнее о JWT можно прочитать здесь.
Подключение пользователей и вход в систему с помощью Spring Boot:
В этом микросервисе мы будем разрабатывать три конечных точки.
- /register = для регистрации пользователя
- /login = для входа пользователя
- /welcome= Тестовая конечная точка с разными ролями.
Создайте проект из инициализатора Spring и добавьте зависимости безопасности Spring и jjwt для работы с JWT и безопасностью.
Для использования Spring Security необходимо понять основы Spring Security, а затем мы можем продолжить реализацию.
Структура проекта:
В структуре проекта в первую очередь мы создадим различные пакеты, такие как:
- Entity — для хранения структур, связанных с БД.
- Модель — для запросов и ответов
- Сервис — для бизнес-логики
- Контроллер — для конечных точек API
- репозиторий для подключения к БД
- helper, util, config — для множества других целей.
Дизайн:
После этого это служба аутентификации, поэтому нам нужно спроектировать отношения между пользователями и ее ролями.
Пользователь. — — — — — —› Роль
Таким образом, у одного пользователя может быть несколько ролей, поэтому у нас будет одна соединительная таблица, в которой будут храниться идентификатор пользователя и идентификатор роли.
Роль Spring Security:
Используя зависимость безопасности Spring, мы расширим его встроенные классы, такие как WebSecurityConfigurerAdapter, и аннотацию, такую как @EnableWebSecurity. в нашем классе конфигурации SecurityConfig.
После переопределения методов этого класса (WebSecurityConfigurerAdapter) для предоставления сведений о том, какие конечные точки будут включены и как они будут настроены.
Образец кода
После этого уровня в обслуживании мы создадим собственную реализацию UserDetail. который будет иметь метод loadUserByusername() (он получит пользователя из БД и сопоставит его с объектом сведений о пользователе)
Теперь для каждого запроса мы хотим применить фильтр JWT, поэтому для этого нам нужно создать один фильтр.
Теперь для генерации, проверки, получения сведений о пользователе и проверки истечения срока действия токена нам нужен класс Util для операций Jwt, который мы можем получить из любого общедоступного репо. это общее для всех, только секрет и время истечения срока действия, которые мы можем изменить в соответствии с нашим вариантом использования.
Это завершит часть безопасности spring и jjwt.
Теперь мы можем создать один контроллер и протестировать наши варианты использования, такие как первая регистрация, затем войти в систему и использовать токен входа для проверки других запросов.
Вы можете протестировать все эти конечные точки с помощью postman.
Вот ссылка на полный рабочий код на Github
Дайте мне знать ваши мысли в комментариях ниже.
Спасибо за прочтение!!!