Настройка аутентификации в Spring Boot с Tomcat: localhost:8080
Быстрый ответ
В приложении Spring Boot с Tomcat по умолчанию имя пользователя и пароль на сервере отсутствуют. Если включена защита через Spring Security, вам понадобится задавать учетные данные в файле конфигурации application.properties
либо использовать автоматически созданный логин и пароль при запуске приложения. Обратите внимание на ваш файл:
spring.security.user.name=admin
spring.security.user.password=changeme
Пример автоматически сгенерированного пароля при запуске:
Using generated security password: [ваш-пароль-здесь]
Если имя пользователя не указано, система будет использовать user
по умолчанию.
Проверка конфигурации Spring Security
В первую очередь, убедитесь, что в файле pom.xml
присутствует зависимость spring-boot-starter-security:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Если данная зависимость установлена, Spring Boot автоматически настраивает пользователя user
и генерирует случайный пароль, отображение которого можно увидеть в логах при старте приложения.
Настраиваем безопасность – двумя способами
Степень безопасности приложения вы можете контролировать двумя способами: через файлы конфигурации или код с условиями безопасности.
Настройка через файлы конфигурации
Для отключения автоматической генерации паролей укажите их в файлах application.properties
или application.yml
:
spring.security.user.name=myuser
spring.security.user.password=mypassword
Настройка безопасности через код
При большей необходимости в разнообразии настроек безопасности воспользуйтесь аннотацией @EnableWebSecurity
и наследуйтесь от WebSecurityConfigurerAdapter
:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
Также можно внести аутентификацию для своих учетных данных, хранящихся непосредственно в памяти:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("customuser").password(passwordEncoder().encode("custompass")).roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
Как избежать ошибок при настройке безопасности
Валидация свойств
Внимательно проверьте корректность кодирования свойств. Не ставьте имена пользователей в кавычки, чтобы не столкнуться с ошибками аутентификации:
# Некорректно
spring.security.user.name="myuser"
# Корректно
spring.security.user.name=myuser
Шифрование паролей
При сохранении пароля в вашей конфигурации используйте специфические префиксы кодировщика паролей, такие как {bcrypt}
для более надежной защиты:
spring.security.user.password={bcrypt}mypassword
Визуализация
Представьте, если бы ваше приложение Spring Boot с Tomcat было шикарным замком 🏰, тогда потребность в контроле "охраны" 🔐 выглядела бы следующим образом:
Подготовка замка, установка условий управления:
Изначальная позиция – пустой замок, открытые ворота:
Логин: отсутствует 🤷
Пароль: отсутствует 🙅♂️
Доступ разрешен, но безопасность находится под контролем:
Доступ: [🏰]
Контроль безопасности: [🔑]
Укрепляем защиту замка
Класс SecurityAutoConfiguration
обеспечивает безопасность по умолчанию, однако добавление вашего InMemoryUserDetailsManager
позволяет провести проверки на высшем уровне. Всегда включайте защиту CSRF и используйте BCryptPasswordEncoder
для шифрования паролей.
Стоит также рассмотреть возможность управления охраной через интерфейс командной строки и внимательно следить за логами активности, чтобы предотвратить появление нежелательных гостей.
Полезные материалы
- Документация Spring Boot — подробно описывает поддержку контейнеров сервлетов в Spring Boot.
- Документация Spring Boot — разъясняет особенности и настройки безопасности в экосистеме Spring Boot.
- GitHub – spring-guides/gs-securing-web — официальный пример демонстрирует организацию безопасности веб-приложения на основе Spring Security.
- Spring Security (Authentication & Authorisation from MySQL) in Spring Boot App – YouTube — видеоурок, в котором раскрывается реализация аутентификации и авторизации в Spring Security.
- Начало работы | Архитектура Spring Security — гайд по архитектуре Spring Security в приложениях Spring Boot.