Простой сервис аутентификации. SpringBootSecurity

GitLab

Напишем простой сервис аутентификации с выдачей JWToken. Для реализации будем использовать Java 17, SpringBoot 3.2.0, h2, Maven в памяти.

Cоздадим и настроим проект https://start.spring.io/

SpringInitializer

SpringInitializer

Нам понадобится:

  • Web

  • Security

  • JPA

  • H2 Database

  • Lombok

Настроим подключение к нашей БД которая будет находится в памяти, так же сервер будем запускать на порту 9090

application.properties

application.properties

Для автоматического заполнения БД создадим пару файлов с созданием и заполнением таблиц data.sql и schema.sql.

Содержание файлов data && schema

data.sql

data.sql

schema.sql

schema.sql

Далее нам потребуется создать сопутствующие сущности User, Role

User

User

Role

Role

Закончили с базовой настройкой, переходим к основному классу WebConfiguration настройки Security. В нем мы должны настроить bean SecurityFilterChain, так же создадим bean PasswordEncoder для возможности шифрования пароля пользователя.

WebConfiguration.jav

WebConfiguration.jav

Для шифрование пароля будем использовать BCrypt.

Далее рассмотрим SecurityFilterChain:

http.headers (headers → headers.frameOptions (HeadersConfigurer.FrameOptionsConfig: sameOrigin))
.csrf (AbstractHttpConfigurer: disable)
.cors (AbstractHttpConfigurer: disable);

В этой строчке мы отключаем CSRF && CORS так как для простого фунционала нам они не понадобятся.

В проде обязательно использовать CSRF && CORS

Т.к h2-console использует frame то для корректной работы нужно добавить header x-frame-options «SAMEORIGIN» или отключить его FrameOptionsConfig: disable

X-Frame-Options используется для предотвращения кликджекинга на сайте. Он определяет, разрешено ли браузеру отображать страницу в ,