Настройка аутентификации в Spring Boot с Tomcat: localhost:8080

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В приложении Spring Boot с Tomcat по умолчанию имя пользователя и пароль на сервере отсутствуют. Если включена защита через Spring Security, вам понадобится задавать учетные данные в файле конфигурации application.properties либо использовать автоматически созданный логин и пароль при запуске приложения. Обратите внимание на ваш файл:

properties
Скопировать код
spring.security.user.name=admin
spring.security.user.password=changeme

Пример автоматически сгенерированного пароля при запуске:

log
Скопировать код
Using generated security password: [ваш-пароль-здесь]

Если имя пользователя не указано, система будет использовать user по умолчанию.

Кинга Идем в IT: пошаговый план для смены профессии

Проверка конфигурации Spring Security

В первую очередь, убедитесь, что в файле pom.xml присутствует зависимость spring-boot-starter-security:

xml
Скопировать код
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

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

Настраиваем безопасность – двумя способами

Степень безопасности приложения вы можете контролировать двумя способами: через файлы конфигурации или код с условиями безопасности.

Настройка через файлы конфигурации

Для отключения автоматической генерации паролей укажите их в файлах application.properties или application.yml:

properties
Скопировать код
spring.security.user.name=myuser
spring.security.user.password=mypassword

Настройка безопасности через код

При большей необходимости в разнообразии настроек безопасности воспользуйтесь аннотацией @EnableWebSecurity и наследуйтесь от WebSecurityConfigurerAdapter:

Java
Скопировать код
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}

Также можно внести аутентификацию для своих учетных данных, хранящихся непосредственно в памяти:

Java
Скопировать код
@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();
}

Как избежать ошибок при настройке безопасности

Валидация свойств

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

properties
Скопировать код
# Некорректно
spring.security.user.name="myuser"

# Корректно
spring.security.user.name=myuser

Шифрование паролей

При сохранении пароля в вашей конфигурации используйте специфические префиксы кодировщика паролей, такие как {bcrypt} для более надежной защиты:

properties
Скопировать код
spring.security.user.password={bcrypt}mypassword

Визуализация

Представьте, если бы ваше приложение Spring Boot с Tomcat было шикарным замком 🏰, тогда потребность в контроле "охраны" 🔐 выглядела бы следующим образом:

Markdown
Скопировать код
Подготовка замка, установка условий управления:

Изначальная позиция – пустой замок, открытые ворота:

Markdown
Скопировать код
Логин: отсутствует 🤷
Пароль: отсутствует 🙅‍♂️

Доступ разрешен, но безопасность находится под контролем:

Markdown
Скопировать код
Доступ: [🏰]
Контроль безопасности: [🔑]

Укрепляем защиту замка

Класс SecurityAutoConfiguration обеспечивает безопасность по умолчанию, однако добавление вашего InMemoryUserDetailsManager позволяет провести проверки на высшем уровне. Всегда включайте защиту CSRF и используйте BCryptPasswordEncoder для шифрования паролей.

Стоит также рассмотреть возможность управления охраной через интерфейс командной строки и внимательно следить за логами активности, чтобы предотвратить появление нежелательных гостей.

Полезные материалы

  1. Документация Spring Boot — подробно описывает поддержку контейнеров сервлетов в Spring Boot.
  2. Документация Spring Boot — разъясняет особенности и настройки безопасности в экосистеме Spring Boot.
  3. GitHub – spring-guides/gs-securing-web — официальный пример демонстрирует организацию безопасности веб-приложения на основе Spring Security.
  4. Spring Security (Authentication & Authorisation from MySQL) in Spring Boot App – YouTube — видеоурок, в котором раскрывается реализация аутентификации и авторизации в Spring Security.
  5. Начало работы | Архитектура Spring Security — гайд по архитектуре Spring Security в приложениях Spring Boot.