Spring Boot: bean validation, шифрование паролей

preview_player
Показать описание
Spring Boot Web Application (MVC): Готовим приложение к деплою, наводим порядок: добавляем шифрование паролей и проверку (валидацию) данных, приходящих на сервер.

Код из видео:

Первым шагом добавим шифрование паролей: в классе WebSecurityConfig добавим инициацию бина PasswordEncoder классом BCryptPasswordEncoder. И сразу же подставим его в authenticationBuilder. Далее добавим шифрование пароля нового пользователя при его регистрации в UserService.

Чтобы уже зарегистрированные в системе пользователи могли войти в систему, добавим скрипт миграции, шифрующий уже унесенные пароли.

Следующим шагом добавим валидацию входящих данных с помощью механизма Bean Validation. Для этого на поля доменных классов добавим аннотации @Length, @NotBlank и пр. с указанием ограничений и сообщений, которые будут отображаться при ошибках валидации.

После этого немного модифицируем контроллеры: добавим к получаемым от пользователя данным аннотацию @Valid и 2 обязательных аргумента: BindingResult и Model, которые должны идти в порядке, приведенном в данном тексте. Первый из них принимает сообщения валидации, а второй служит для передачи данных из контроллера во view.

Последним шагом остаётся только вывести сообщения об ошибках валидации во view. Для оформления сообщений используем стили из CSS фреймворка Bootstrap.

Сайт bootstrap:

Для проверки корректности работы приложения можно использовать сервис времменых почтовых ящиков:

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

Поддержать проект:

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

Рекомендации по теме
Комментарии
Автор

Лучший автор на весь ютуб. Быстрый набор кода, подробные объяснения без воды, приятный голос и шустрая система на компе автора. Смотреть, как вы кодите - отдельное удовольствие. Браво!

kunnilinux
Автор

Прежде всего я бы хотел выразить Вам свою благодарность за столь полезные видео уроки.) У меня есть к Вам просьба, не могли бы Вы сделать небольшой видео урок, о том как добавить сюда поддержку Cookie, что бы на форме логина была кнопка - "Запомнить меня", и при следующем нашем возвращении на сервер, он нас помнил и не требовал делать логин снова. Я думаю это будет не менее полезный и интересный урок.) Ещё раз спасибо за то, что вы делаете!)

farallel
Автор

Смотрю эту серию видеоуроков и убеждаюсь в ее шедевральности

andrevero
Автор

Небольшая неточность в RegistrationController-е в методе addUser в первом if блоке после проверки на совпадении паролей и после добавления атрибута нужно сделать return "registration";Так как при не совпадении паролей user регистрируется в базе

Ро́бертДжеймсФишер-ве
Автор

Если в профиле поменять пароль, то потом нельзя зайти в свою учетную запись ибо она не шифруется в базе данных. Нужно изменить в методе обновления профиля

Igor_Litvinyuk
Автор

Забыл. Спасибо автору за канал, группу в вк и все то что он для нас непросвещенных делает

MrAivan
Автор

Это пиздец, как полезно и хорошо подано. Спасибо, автор

nonenone
Автор

Неболшая неточность на уровне опечатки)
В main.ftl в 29 строке забыли добавить еще class="form-control ${(tagError??)?string('is-invalid', '')}". Иначе он молча его скидывает когда поле длиннее 255, ничего не выводя при этом.

Vladislaver
Автор

Хочется выразить Вам огромную благодарность! С такими видео спринг изучается с удовольствием.

ИлесЗаудинов
Автор

Большое спасибо за то, что вы такая замечательная команда. 😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊

chelkatrao
Автор

Для MySQL: в файл миграции можно вписать шифрование по MD5,
А в бине PasswordEncoder возвратить

MrAivan
Автор

Самые качественные видео на эту тему, /и в рунете, и на англ/ Крутой
подход, спасибо автору. Следовал видео и получилось сделать интересный
проект, который любопытно "докручивать" самому. Советы автора помогают
не утонуть в деталях и не потерять мотивацию. Спасибо ребятам в
комментах - если вы напоролись на ошибку, решения находил здесь же.
Успехов! Хватит читать комменты, идите кодить)

ВикторияК-сц
Автор

Спасибо, за отличные уроки! В 14:40 появилась ссылка на profile у не зарегистрированного пользователя

АлексейБет
Автор

Для тех, у кого происходит зацикливание бинов в WebSecurityConfig и UserService - просто вынесите
@Bean
public PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder(8);
}
В отдельный конфиг файл, например BeenConfig.java

MrREALball
Автор

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

ВиталийШишлаков-тт
Автор

есть еще один момент - программа не стартует. Говорит не может создать бин. Ссылки зациклены. Помогло решить эту проблему создание нового класса CustomConfig пометить его как @Configuration и вынести в него бин getPasswordEncoder() --> @Configuration public class CustomConfig { @Bean public PasswordEncoder getPasswordEncoder() { return new BCryptPasswordEncoder(8); }}

SamuilOlegovich
Автор

Действительно, в миграции V3 для MySQL могут быть неожиданности с шифрованием уже имеющегося пароля у admin. Поэтому можно обойтись малой кровью: открыть bcrypt online, ввести туда пароль, сгенерировать шифрованный пароль и вставить его в миграцию V2 при создании админа.

btbest_test
Автор

Спасибо за очередной мегапродуктивный урок.

volodymyrkhoma
Автор

После добавления функционала с password confirmation. возникла проблема: После регистрации переходя по линку активации выпадала 500 ошибка + то что поле password2 не может быть пустым. В итоге перенес конфирмацию пароля на сторону клиента (java script).
Кто нибудь сталкивался с подобной проблемой? Если да то, решили? И как?


Всем спасибо.

kirilltseitlin
Автор

Автор, спасибо. Нашел нюанс с spring session. Когда пытаемся залогиниться с пустыми полями, появляется ошибка, но поскольку ошибка висит в сессии, она не сбрасывается корректно т.е. при обычном рефреше страницы, ошибка висит. Мое решение, проверять есть ли параметр в реквесте error, если он есть, берем ошибку из сессии спринга


<#if RequestParameters.error??>
<div class="alert alert-danger" role="alert">

</div>
</#if>

ilyagvozdev