Как подключить spring security к проекту

Краткий обзор Spring Security

Итак, дорогой хабраюзер, предлагаю тебе рассмотреть такие аспекты Spring Security как:

Ключевые объекты контекста Spring Security:

Позволяет получить из источника данных объект пользователя и сформировать из него объект UserDetails который будет использоваться контекстом Spring Security.

Аутентификация

(1) Пользователю будет предложено войти в систему предоставив имя (логин или email) и пароль. Имя пользователя и пароль объединяются в экземпляр класса UsernamePasswordAuthenticationToken(экземпляр интерфейса Authentication) после чего он передается экземпляру AuthenticationManager для проверки.

(2) В случае если пароль не соответствует имени пользователя будет выброшено исключение BadCredentialsException с сообщением “Bad Credentials”.

(3) Если аутентификация прошла успешно возвращает полностью заполненный экземпляр Authentication.

(4) Для пользователя устанавливается контекст безопасности путем вызова метода SecurityContextHolder.getContext().setAuthentication(…), куда передается объект который вернул AuthenticationManager.

Подключение поддержки Security для SpringFramework приложения:

Ну и конечно же сам файл с настройкой security.xml

Пояснение к коду security.xml:
Подразумевается что на странице login.jsp есть форма с action=»/j_spring_security_check» в которой содержаться input’ы для имени и пароля с name=«j_username» и name=«j_password», а также checkbox c name=»_spring_security_remember_me». Это всё специальные значения которые требует Spring Security иначе параметры просто не будут передаваться в контекст безопасности. После успешного прохождения аутентификации пользователь будет перенаправлен на страницу /index где уже применяются правила авторизации. Если не указывать форму и url в http spring-security тогда по умолчанию будет работать basic authentication или можно подключить basic authentication насильно указав в http spring-security

На url /index* доступ могут иметь пользователи с правами ROLE_USER, а также гости (все подключения которые не прошли аутентификацию получают имя guest и права ROLE_ANONYMOUS).
Доступ к url /add* имеют только пользователи с правами ROLE_USER Доступ к url /delete* только пользователи с правами ROLE_ADMIN

Также, авторизованный доступ можно прикручивать на методы, для этого в security.xml нужно добавить, следующий элемент:

Также может осуществляться проверка хешированных паролей:

Источник

Интеграция Spring Security в Spring MVC

Здравствуйте. Если вы только начали изучать Spring Framework, то в этой статье я объясню как подключать Spring Security в Spring MVC на базе IDE IntelliJ IDEA. Этот пример для новичков, поэтому попробую объяснить максимально просто и прокомментировать весь код.

Для начала, что же такое Spring Security? Это Java Framework который предоставляет механизмы построения систем аутентификации и авторизации, а также другие возможности обеспечения безопасности для промышленных приложений, созданных с помощью Spring Framework.

Первое что нам потребуется это создать Maven проект. В правом нижнем углу появится окно, щелкаем Enable Auto-Import, для автоматического импорта внесенных данных:
Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

В pom.xml нам потребуются базовые зависимости для Spring MVC, Security и сервлетов:

Далее, заходим в File → Project Structure → Выбираем слева в меню Modules и удаляем пустой Spring который был создан при подключение библиотек в pom.xml. Затем нам необходимо подключить модули Spring Security и Spring MVC. Для этого мы нажимаем правой кнопкой мыши по папке нашего проекта и выбираем Add Framework Support. В нем ставим галочку напротив Spring, Spring MVC, Spring Security. В Spring также необходимо поставить галочку возле «Create empty spring-config.xml», что бы нам также создало пустой конфигурационный файл Spring’a:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

После этого в наш проект была добавлен папка Web. В WEB-INF нам не хватает security-context.xml, поэтому мы создадим его сами (ПКМ на WEB-INF → New → XML Configuration File → Spring Config). Файл мы создали, но к проекту он все еще не подключен. Для этого заходим в web.xml, там видим тег param value и подключенный applicationContext.xml. После него делаем отступ и вводим «/WEB-INF/security-context.xml». Лучше всего это оформить в таком виде:

В web.xml нам также нужно подключить фильтры Spring Security. Они считывают информацию о пользователях из нужного места и строят Spring Security объекта Authentication. И не забываем создать новый servlet-mapping с именем «dispatcher» и путем «/». После добавляем такой код:

Теперь когда у нас все подключено, пора приступать к настройке. Переходим к dispatcher-servlet.xml. Описание будет в коде:

Я скинул весь код не просто так, проверьте что у вас подключено в beans и сравните с этим. Для удобства создайте в папке WEB-INF папку view и перенесите туда index.jsp. Также создайте в папке java папку com и в ней класс Controller. В нем создадим базовый запрос:

Осталось настроить security-context:

Также нам необходимо добавить библиотеки в наш артефакт. Заходим в File → Project Structure → Выбираем слева в меню Artifacts и в Available Elements дважды кликаем по недостающим элементам:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Теперь настраиваем Tomcat:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

И следует добавить наш артефакт в deployment:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Готово, надеюсь у вас все вышло. Вот этот проект на GitHub: Spring Security

Источник

Краткий обзор Spring Security, создание проекта и подключение зависимостей

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Spring Security — среда для аутентификации и авторизации пользователей. Фреймворк применяется для защиты приложений на Spring. В нем представлены базовые инструменты безопасности, которые без труда расширяются для решения разных задач.

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

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

1. Основные возможности

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

Spring Security не ограничивается аутентификацией. Фреймворк также помогает решить проблему с безопасным хранением паролей.

Spring Security предлагает назначить объекту UserDetails собственный шифровальщик паролей. По умолчанию используется BCrypt. Также можно настроить количество раундов хеширования и реализацию случайного алгоритма.

Аутентификация In-Memory

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

Это полезно при разработке и тестировании. Реальная база данных при таком подходе остается нетронутой.

LDAP-аутентификация

Lightweight Directory Access Protocol (LDAP) — протокол аутентификации учетных записей пользователей в организациях. Позволяет определять структуру пользователей и групп пользователей, назначать им права доступа.

Дополнительную информацию вы можете получить в официальном руководстве по использованию аутентификации LDAP.

Управление сессией

Spring Security предоставляет механизмы для управления сеансом пользователя. Он создает эти механизмы контроля при входе в систему и уничтожает при выходе.

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

Remember Me Authentication

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

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

OAuth 2.0

Open Authorization 2.0 — открытый стандарт проверки прав пользователя с помощью сервиса авторизации. Он также используется для реализации таких функций, как вход через учетные записи Facebook, Google и других крупных площадок.

Настройка сервера авторизации и внедрение OAuth сопряжены с высоким риском и могут отнять много времени. В этом процессе легко ошибиться и создать уязвимость. Spring Security предлагает защитить сайт с помощью готовых инструментов — например, Auth0.

Это лишь некоторые возможности аутентификации и авторизации через Spring Security. Если хотите узнать больше, смотрите документацию Spring Boot.

2. Пример подключения Spring Security

Посмотрим на практике, какие настройки включаются по умолчанию при добавлении в проект Spring Security.

Подготовка

Сгенерируйте на Spring Initializr приложение с зависимостью Web :

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

Подключение Spring Security

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

Проверка изменений

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

Настройка аутентификации

Spring Security использует Form-Based-аутентификацию. Пользователь отправляет имя и пароль через форму. Сервер берет эти данные из запроса как POST-параметры.

Теперь посмотрим, как сервер хранит данные пользователей. Интересно, что они находятся не в базе, не на LDAP-сервере, а в оперативной памяти приложения. И хранятся там до тех пор, пока оно запущено. Такая аутентификация называется In-Memory authentication.

Чтобы отредактировать пользователя, необходимо заново запустить приложение. Для продакшена такой вариант не подходит, но для экспериментов в процессе разработки это простой и полезный метод.

Теперь пароль не будет каждый раз генерироваться заново. Аналогичным образом можно задать других пользователей. Это полезно для будущей проверки разграничения прав доступа.

Теперь — пояснения. Здесь вы переопределяете метод configure Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проектуAuthenticationManagerBuilder auth класса WebSecurityConfigurerAdapter, получаете доступ к билдеру AuthenticationManagerBuilde и уже через него настраиваете нужный AuthenticationManager.

Затем определяются специальные настройки AuthenticationManager. Вы уточняете, как он извлекает пользователя из хранилища, чтобы сравнить его с введенными данными. В этом случае In-Memory-аутентификация позволяет ускорить процесс. Имя и пароль заданы в том же файле.

AuthenticationManager достает не только имя и пароль, но и разрешения пользователя — authorities( «ROLE_USER» ).

Что в итоге делает приведенный выше фрагмент кода:

Обратите также внимание на бин PasswordEncoder. В нем указано, как шифровать пароль. В приведенном выше примере пароль не шифруется. Так можно делать только на учебных проектах для наглядности. В реальном приложении NoOpPasswordEncoder не используется.

3. Создание проекта и подключение зависимостей

Итак, мы готовы, чтобы написать обещанное простое приложение с регистрацией и входом в учетную запись пользователя. Используемые технологии: Spring Boot, Spring Security, Spring Data JPA, Hibernate, MySQL, JSP, Bootstrap и Docker Compose.

Создание проекта

Структура проекта должна выглядеть так:

Добавление зависимостей

Содержимое файла pom.xml :

Определение объектов JPA и Hibernate

Содержимое файла User.java :

Содержимое файла Role.java :

Использование репозиториев Spring Data JPA

Файл UserRepository.java :

Файл RoleRepository.java :

Определение UserDetailsService Spring Security

Файл UserDetailsServiceImpl.java :

Создание сервиса безопасности

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

Создание службы пользователя

Также нужно создать службу для регистрации пользователей.

Определение валидатора

Настройка контроллеров

POST-контроллер /login определять не нужно. Его по умолчанию предоставляет Spring Security.

Шаблоны просмотра JSP (Bootstrap)

Здесь достаточно трех файлов: для регистрации, входа и приветствия.

Определение свойств

Конфигурация веб-безопасности

Конфигурация приложения

Запуск Docker-контейнера

Подготовьте Dockerfile для приложения Java / Spring Boot и файл docker-compose.yaml для MySQL Server.

Содержимое Dockerfile:

Содержимое docker-compose.yml :

Перейдите в корень проекта и запустите Docker:

Тестирование

Чтобы запустить приложение на локальном сервере MySQL, измените в application.properties « hk-mysql » на « localhost », перейдите в корневой каталог проекта и выполните команду:

Перейдите в браузере по адресу localhost: 8080 и протестируйте приложение. Попробуйте заходить под разными пользователями, выходить, добавлять новые функции и изменять права доступа.

Исходный код нашего проекта — в репозитории на GitHub.

Итоги

В этой статье мы познакомились с основами Spring Security и разобрали основные возможности этого фреймворка. Не ограничивайтесь теорией. Попробуйте собрать собственное простое приложение с регистрацией и аутентификацией.

Для закрепления материала также посмотрите этот тематический видеокурс:

Источник

Быстрый старт в Spring Security

В этом уроке будет рассмотрен пример реализации аутентификации пользователя используя Spring Security.

Шаг 1. Создание проекта и подключение зависимостей

Начнем с традиционного создания проекта:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Создали Maven проект, теперь добавим зависимости в pom.xml их будет довольно таки много, поэтому прикладываю полный pom файл:

По каждому из зависимостей не буду останавливаться, но включил самые обязательные зависимости для реализации Spring Security.

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

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Шаг 2. Начинаем с конца, делаем внешний вид

Для большей привлекательности как к внешнему виду, так и мотивации изучить этот урок, я решил использовать Bootstrap 3.

Скачиваем bootstrap и в проекте создаем папку webapp/pages/ и копируем туда файлы bootstrap-а. (смотрите на структуре проекта)

Теперь создаем webapp/pages/index.jsp:

Выглядеть эта страница будет так:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Создаем следующую страницу на которой собственно и будет происходить вход на сайт webapp/pages/login.jsp:

Тут обратите особое внимание на обя тега input, а именно на их name:

name=”j_username

name=”j_password

В данном случае эти поля должны быть именно с такими значениями.

А также вы возможно уже увидели эту строку:

так мы создали переменную, которая будет хранить ссылку на security check, он выполняет аутентификация, где значение value обязательно должно быть таким.

Выглядеть она будет так:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Думаю получилось не плохо 🙂

Шаг 3. Создаем контроллеры

О создании MVC проекта на Spring можно почитать урок Spring MVC Hello World

Создаем пакет controller и класс MainController:

Этот контроллер будет просто направлять пользователя на страницу index.jsp.

А теперь создадим второй аналогичный контроллер, который будет показывать пользователю страничку login.jsp.

Создаем класс и называем его LoginController:

Теперь мы сможем ходить по страничкам.

Шаг 4. Конфигурирование Spring MVC

Теперь нам нужно сконфигурировать Spring MVC чтобы он имел возможность разворачивать свой контекс и мы могли получать доступ к нашим бинам.

Создаем в пакете config класс WebAppConfig и наследуем его от WebMvcConfigurerAdapter:

Подробную информацию о Java Config для Spring вы можете посмотреть в уроке Spring 3. JavaConfig на примере Spring MVC.

Шаг 5. Создание Entity

Так как цель урока показать пример использования Spring Security, то я не стал реализовывать работу с БД, а всего лишь создал все необходимое для этого, чтобы в будущем реализовать Spring DATA.

Создаем entity по сути это простой класс, так как мы не используем не ORM фреймворков, назовем его User:

В будущем вы можете этот объект пополнять своими свойствами, но для примера нам достаточно знать Login (логин) и Password (пароль).

И еще в этом же пакете создадим пакет enums и в нем создаем enum UserRoleEnum, который будет определять роли пользователя:

Теперь у нас есть 3 роли, которые мы немного позже будем использовать.

Шаг 6. Создаем слой Services

Обычно проекты имеют несколько уровней слоёв, о которых я еще напишу статью, но один из этих слоёв мы реализуем прям сейчас.

Нам нужно реализовать Service tier (сервис слой либо уровень обслуживания). Создаем пакет service и в нем создаем интерфейс UserService:

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

А теперь давайте напишем первую реализацию данного интерфейса, для этого создаем на том же уровне класс UserServiceImpl:

Как видите реализация довольно простая, тут мы просто заполняем объект User используя setters, но мы также можем в этом сервис методе вызвать метод из DAO, который бы достал нам этого юзера с БД например либо получил бы его с Web Service.

Обратите внимание, что я установил в поле Password специфичный пароль, а именно зашифрованный в SHA1 формате.

То есть я взял пароль “1234” и зашифровал его в SHA1 формат с помощью online сервиса SHA1 online generator и получил уже зашифрованный пароль “7110eda4d09e062aa5e4a390b0a572ac0d2c0220“.

Шаг 7. Создаем реализацию UserDetailsService

Для того, чтобы связать наш сервис UserService со Spring Security, нам нужно реализовать специальный интерфейс фреймворка Spring Security который позволит выполнять аутентификацию пользователя на основании данных полученных с UserService написанного выше.

Создаем класс UserDetailsServiceImpl и реализуем его от UserDetailsService:

Этот сервис и является основной логикой аутентификаци c использованием Spring Security.

Шаг 8. Добавляем инициализацию бина UserDetailsServiceImpl в конфигурацию WebAppConfig

Для того чтобы наша реализация интерфейса UserDetailsService смогла инициализыроваться контейнером Spring нам нужно добавить его в WebAppConfig:

После этого Spring контейнер будет знать какую реализацию интерфейса UserDetailsService нужно брать.

Шаг 9. Конфигурирование Spring Security

Теперь самое главное, заставить все это заработать 🙂

Создаем в пакете config класс SecurityConfig и наследуем его от WebSecurityConfigurerAdapter:

Это базовая конфигурация, которая нужна для наших нужд, она может расширятся.

Шаг 10. Регистрация конфигураций в контексте Spring

Чтобы Spring видел наши конфигурации, а именно WebAppConfig и SecurityConfig их нужно зарегистрировать в контексте Spring.

Создаем в пакете config класс Initializer и реализуем WebApplicationInitializer:

На этом этап конфигурации проекта можно считать законченным.

B web.xml нужно добавить фильтр, который будет определять наши реквесты и проверять валидность сессии:

Шаг 11. Развертывание и тестирование

Пора все собрать и развернуть на сервере приложений.

Собираем проект с помощью Maven:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Теперь развертываем собранный собранный war на сервере приложений, я выбрал Tomcat 8.

Конфигурируем Intellij IDEA под Tomcat. Заходим в Edit Configuration…

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Конфигурируем также как показано на скриншоте, потом переходим в раздел Deployment:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

После этого запускаем. Попадем на главное окно жмем Войти переходим на форму с логином и нажимаем Войти, после этого вас перенаправит на главную страницу где вы увидите свой логин.

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

На этом все. Надеюсь данный урок вам поможет.

Также читайте серию статей «Spring Data JPA. Работа с БД»: часть 1, часть 2 и часть 3

Источник

Добавление Spring Security в проект — настройки по умолчанию

В этой статье рассказывается, что будет, если добавить в проект Spring Security — какие настройки включатся по умолчанию.

Подготовка

Сгенерируем на https://start.spring.io/ Spring Boot приложение с зависимостью Web:

Напишем в нем единственный REST-контроллер:

Сейчас к нему имеют доступ все:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проектуДоступный всем контроллер

Добавление Spring Security

Для того, чтобы включить Spring Security, достаточно добавить Maven-зависимость:

И сразу же мы столкнемся с неожиданностью. Теперь при попытке ввести в браузере http://localhost:8080/api/hello мы перенаправляемся на страницу логина http://localhost:8080/login. Если ввести в нее любые наугад взятые данные, получим ошибку:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проекту

Отсюда очевидно, что некая проверка выполняется. Но какая?

Что дает зависимость spring-boot-starter-security

Обычно включение любого стартера в POM-файл ничего не дает: чтобы что-то запрограммировать, все равно надо написать дополнительный код. В случае Spring Security все иначе.

Давайте заглянем в консоль. В ней видно, что генерируется некий пароль:

Как подключить spring security к проекту. Смотреть фото Как подключить spring security к проекту. Смотреть картинку Как подключить spring security к проекту. Картинка про Как подключить spring security к проекту. Фото Как подключить spring security к проектуВ консоли выдается сгенерированный пароль

Да, Spring Security создал некоего пользователя по умолчанию. Имя его user, а пароль генерируется автоматически при запуске программы.

Итак, что происходит при одном только добавлении spring-boot-starter-security в POM-файл:

Страница «разлогина»

In-Memory аутентификация

С точки зрения получения параметров пользователя из запроса, продемонстрированная выше аутентификация является Form-Based — имя и пароль отправляются через форму и берутся на сервере из запроса как POST-параметры.

С точки зрения же хранения пользователей на стороне сервера, продемонстрированная выше аутентификация в Spring Security называется In-Memory authentication. Она означает, что пользователь хранится не в базе, не на LDAP-сервере и не где-либо еще, а в оперативной памяти приложения до тех пор, пока оно запущено. И чтобы отредактировать пользователя, придется заново запускать приложение. Разумеется, этот вариант не годится для среды Production, зато он прост и полезен для экспериментов во время разработки.

Как задать своего пользователя в In-Memory аутентификации

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

Но чтобы не подсматривать пароль в консоли, можно воспользоваться файлом настроек application.yml — зафиксировать имя/пароль там.

Переопределение пользователя и пароля в настройках

Для этого в настройках application.yml нужно задать свойства:

Можно задать и несколько пользователей — давайте сделаем это в коде. Перейдем наконец к написанию кода — напишем класс-конфигурацию для Spring Security и настроим в нем аутентификацию явно.

Настройка In-Memory аутентификации в коде

Итак, создадим класс SecurityConfig, который расширяет класс WebSecurityConfigurerAdapter. Сделаем его бином с помощью @EnableWebSecurity:

Аутентификацию выполняет AuthenticationManager, но определять этот бин явно нам не надо. Вместо этого надо переопределить метод configure(AuthenticationManagerBuilder auth) класса WebSecurityConfigurerAdapter — так мы получим доступ к билдеру AuthenticationManagerBuilder, а уж через него настроим нужный нам AuthenticationManager. Делается это так:

На самом деле AuthenticationManager достает не только реальные имя и пароль, но еще разрешение пользователя (что ему разрешено делать в приложении). Мы задали двух пользователей с разрешением ROLE_USER. В данном примере разрешения не используются, мы будем их использовать в примере про авторизацию.

Итак, мы настроили AuthenticationManager, который сравнивает переданные имя и пароль со значениями имени и пароля u1 p1 и u2 p2. В случае совпадения с любым из пользователей, аутентификация проходит успешно.

Обратите внимание на бин PasswordEncoder — в нем задается, как шифровать пароль. Мы задали NoOpPasswordEncoder, который не делает ничего — оставляет пароль в первоначальном виде. Это выбрано в учебных целях, чтобы было наглядно, что требуется вводить в форму логина при запуске примера — ведь в методе password(«p2») задается уже зашифрованный пароль. Конечно, в реальном приложении NoOpPasswordEncoder не пригоден — пароль нужно шифровать, например, с помощью BCryptPasswordEncoder.

Итоги

Таким образом, в примере мы вручную воспроизвели In-Memory аутентификацию, которая вообще-то предоставляется по умолчанию при добавлении security-стартера в проект. Правда, немного видоизменили ее, добавив двух своих пользователей.

Код примера есть на GitHub, в следующей статье настроим авторизацию.

Источник

Добавить комментарий

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