Этот пост направлен на рассмотрение минимальной конфигурации, необходимой для настройки базовой аутентификации для всех конечных точек и одного статического пользователя. Если вы ищете немного более гибкое решение, такое как защита частей приложения или чтение пользователей из хранилища, поддерживаемого базой данных, вот отличный ресурс для начала. Вместо этого мы рассмотрим только базовую настройку, в значительной степени полагаясь на автоконфигурацию весенней загрузки. Полный список функций, включенных в автонастройку, можно найти по этой ссылке.

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Без дополнительной настройки для доступа ко всем конечным точкам приложения теперь требуется базовая пара имени пользователя и пароля для аутентификации. Кроме того, весенняя загрузка не полагается на стандартный запрос имени пользователя/пароля для аутентификации в браузере по умолчанию, а предоставляет пользовательскую HTML-страницу по пути /login.

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

По умолчанию Spring использует предопределенное имя пользователя «user», а новый пароль генерируется при каждом запуске приложения и отображается в журналах приложения.

2022-06-19 14:36:06.842 WARN 11765 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: c30bea2b-0890-4e95-902e-db55d03b8a00
This generated password is for development use only. Your security configuration must be updated before running your application in production.

Чтобы проверить настройку, мы можем использовать следующую команду curl. Не забудьте обновить командный пароль на тот, который напечатан в ваших журналах.

curl -u 'user:c30bea2b-0890-4e95-902e-db55d03b8a00' localhost:8080

Мое примерное приложение отвечает 404, так как у меня ничего нет на корневом пути, в зависимости от вашей настройки ответ может отличаться.

Динамический характер пароля не делает его непригодным для разработки, где перезагрузки очень часты и ожидаемы. К счастью, пароль можно легко установить с помощью файла application.properties. Файлы application.properties обычно расположены по пути src/main/resources/application.properties.

spring.security.user.password=password

Чтобы проверить это, обновите ранее использовавшуюся команду curl с новым паролем (опция -u curl объединит и закодирует имя пользователя/пароль в base64 в соответствии с основными требованиями аутентификации). :

curl -u 'user:password' localhost:8080

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

SPRING_SECURITY_USER_PASSWORD=password

or

spring_security_user_password=password

Spring переменные среды нечувствительны к регистру, поэтому не имеет значения, какую из них вы решите использовать.

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