Тёмный

Создание REST API с использованием Spring WebFlux и Security 

Eugene Suleimanov
Подписаться 28 тыс.
Просмотров 25 тыс.
50% 1

В данном видео рассмотрен пример создания REST API с использованием следующих технологий:
- Spring Boot 3
- Spring Security (JWT)
- Spring WebFlux
- Spring Data R2DBC
- MapStruct
- PostgreSQL
- Flyway
Ссылка на Github репозиторий:
github.com/proselytear/webflu...
Наше дружное сообщество:
t.me/pse_club
Материалы для разработчиков:
proselyte.net/
00:00:00 Введение
00:00:20 Создание проекта
00:11:36 Создание миграций БД
00:15:40 Создание базовых классов
00:23:20 Реализация логики генерации JWT токена
00:46:30 Реализация логики валидации JWT токена
00:53:05 Построения цепочки аутентификации
01:04:22 Финальная конфигурация с использованием SecurityWebFilterChain
01:12:11 Реализация REST контроллеров
01:23:15 Проверка REST API средствами Postman
01:24:21 Добавление и конфигурация обработчика ошибок
01:25:40 Заключение

Опубликовано:

 

16 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 239   
@nsandrus
@nsandrus Год назад
Отличная подача материала. Благодарю за урок и потраченное на его создание время.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Большое спасибо за отзыв!
@Mr.J248
@Mr.J248 Год назад
Для того чтобы хорошо уметь тестировать авторизацию/регистрацию юзера , ее нужно написать ))) сегодня этим и займусь пожалуй )) спасибо Евгений )
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв и удачи :)
@mikalaim7690
@mikalaim7690 Год назад
Большой респект за ваши видео, пожалуйста, продолжайте
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Большое спасибо за отзыв!
@user-br4gt7xu2j
@user-br4gt7xu2j 2 месяца назад
Суперское видео! Столько информации полезной. Есть несколько вопросов: 1) зачем в ДТО id? Ведь мы работаем с этими id только в нашей системе. И зачем в ДТО enum? Почему не строка? Ведь чем проще типы данных в ДТО, тем проще с ними работать во внешних системах и на клиенте. 2) почему в целом не сделал ДТО иммутабельным? По логике любой ДТО не должен изменяться, а служит лишь для передачи данных. 3) почему в UserEntity hashcode() не по полю username? это поле уникально и обязательно, поэтому было бы логично избежать таким образом возможных проблем рассчета хэша при добавлении полей в будущем(например в случае зацикливания и т.п.), тут такого не предвиделось, но в целом в качестве хорошей практики. 4) почему секретные проперти(пароли, секреты) задаются напрямую, а не через переменные окружения?
@EugeneSuleimanov
@EugeneSuleimanov 2 месяца назад
Спасибо за отзыв и вопросы! 1. ID часто отдают в DTO, enum позволит сразу отсечь некорректные значения. 2. Не всегда удобно для тестирования 3. корректное замечание, можно было сделать и так. 4. Учебный проект, поэтому для удобства работы хардкод.
@divergenny
@divergenny Год назад
Ураааа спасибо огромное ))))) Как и просил вас про спринг секьюрити. Вы лучший!)
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@user-lk8n0fgjk
@user-lk8n0fgjk Год назад
Евгений, спасибо за качественный и постоянный контент!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@-boiadeiro-
@-boiadeiro- Год назад
Очередное полезное видео, спасибо Евгений!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв, Семён!
@webicode
@webicode 10 месяцев назад
Урок супер ! Подача материала класс !
@EugeneSuleimanov
@EugeneSuleimanov 10 месяцев назад
Спасибо за отзыв :)
@user-bq6xi8vd3u
@user-bq6xi8vd3u Год назад
Здоровья тебе! Большое спасибо!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за комментарий и пожелания! Взаимно!
@sk-xdv-fre
@sk-xdv-fre Год назад
Отличный урок, большое вам спасибо!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@Kiberpiest1
@Kiberpiest1 Год назад
Огромное спасибо! Урок супер!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв, Петя!
@nurbekabdirasulov1150
@nurbekabdirasulov1150 Год назад
Отличный, полезный понятный урок благодарен вам коллега!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@user-it1ms8jn1x
@user-it1ms8jn1x Год назад
Евгений, огромное спасибо за труды, было очень приятно и полезно смотреть, очень крутой уровень донесения информации! Не сразу все понятно, надо пару раз вдумчиво пересмотреть, но это круто, снимаю шляпу.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо вам за отзыв!
@dendenovich8460
@dendenovich8460 Год назад
Огромнейшее спасибо! Что бы я без вас делал!)
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв :)
@user-nz8zq3gj1f
@user-nz8zq3gj1f Год назад
Посмотрел чуть ли не на одном дыхании, спасибо! Узнал много нового для себя
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв, рад, что материал оказался полезен!
@user-uj8ep6fe3k
@user-uj8ep6fe3k Год назад
Уже бьюсь в экстазе от используемых технологий в начале видео) спасибо за прекрасный вечер)
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв :)
@user-ti7wk4qt6s
@user-ti7wk4qt6s 11 месяцев назад
Наконец-то актуальное видео на эту тему! Спасибо большое!
@EugeneSuleimanov
@EugeneSuleimanov 11 месяцев назад
Спасибо за комментарий!
@alexshutov5442
@alexshutov5442 Год назад
пушка. Очень ждал чего-нибудь реактивненького)
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за комментарий!
@yaroslavmordvinov622
@yaroslavmordvinov622 Год назад
💣💣💣
@Devivl
@Devivl Год назад
Большое спасибо за видео, Евгений! Однозначно must have для всех людей, изучающие Java! Что в ютубе, что в телеграмм канале максимально собранная и четкая речь! Очень приятно читать и слушать.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@Amberdance
@Amberdance Год назад
Спасибо за материал! Свежо и актуально (особенно на фоне видео с 3+ летней давности по спрингу), подписка.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@kovashgang7110
@kovashgang7110 10 месяцев назад
Супер, не только реактивщина, но и еще куча полезных мелочей. Однозначно топ контент.
@EugeneSuleimanov
@EugeneSuleimanov 10 месяцев назад
Спасибо за отзыв!
@Anticipant
@Anticipant Год назад
все время удивляюсь вам, спасибо за лучший бесплатный контент по Java и не только!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Большое спасибо за отзыв!
@vladimirkrylov4947
@vladimirkrylov4947 Год назад
Спасибо Евгений! Отличная подача и содержание. недавно делал авторизацию на реактивщине, но все равно посмотрел видос.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Большое спасибо за отзыв!
@krskvvld
@krskvvld Месяц назад
Спасибо огромное за такой видеоурок!
@EugeneSuleimanov
@EugeneSuleimanov Месяц назад
Спасибо за отзыв!
@user-bt9hx3ik6e
@user-bt9hx3ik6e Год назад
ооо видео по реактивности!афигенно. спасибо! а можно видео по реактивности именно по теории. что это такое, что дает, в общих чертах как устроено
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв! По видео - попробую поставить в очередь :)
@user-ks3fb4no5b
@user-ks3fb4no5b 3 месяца назад
Евгений, 100 тысяч спасибо!!! Именно то, что искала и еще и в Вашей великолепной подаче😁 ну просто 100 из 100!
@EugeneSuleimanov
@EugeneSuleimanov 3 месяца назад
Большое спасибо за отзыв!
@igorpavlenkov3658
@igorpavlenkov3658 Год назад
Видео очень интересное, спасибо!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@alexanderlepekhin9684
@alexanderlepekhin9684 8 месяцев назад
Большое спасибо за урок! Очень порадовало увеличение размера шрифта, никто обычно об этом не заботится
@EugeneSuleimanov
@EugeneSuleimanov 7 месяцев назад
Спасибо за отзыв!
@user-nh7tp8xj8y
@user-nh7tp8xj8y Год назад
Евгений, спасибо отличный материал!!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв, Роман!
@user-nh7tp8xj8y
@user-nh7tp8xj8y Год назад
@@EugeneSuleimanov Очень хотелось бы увидеть как тестировать такие ресты, создание, валидация токена. Если сделаете такое видео, то будет супер классно, а так отличная работа - моё почтение ))
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@user-nh7tp8xj8y добавлю в очередь, спасибо за идею!
@user-wt1hc4hm3t
@user-wt1hc4hm3t Год назад
Контент ТОП, ждем продолжения.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@alexdiz4189
@alexdiz4189 Год назад
лучшее видео из актуального по данной теме! лайк, подписка
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@MgsMen
@MgsMen Год назад
От души❤❤❤ Это прям супер топ🎉🎉🎉🎉
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв :)
@alenache1
@alenache1 Год назад
как всегда 🔥🔥🔥🔥🔥
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв :)
@user-vt6jc3pd1k
@user-vt6jc3pd1k 11 месяцев назад
Спасибо, полезное очень видео
@EugeneSuleimanov
@EugeneSuleimanov 11 месяцев назад
Спасибо за отзыв!
@user-zm2ft7lo7g
@user-zm2ft7lo7g Год назад
Крутой ты мужик , спасибо 🎉
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв :)
@user-lt8vv5lk1w
@user-lt8vv5lk1w Год назад
Спасибо, очень полезное видео. Чтобы не писать скрипты для базы справа вкладка, в ней удобней и быстрее все делать. Если это скрипт стартовый для создания с нуля, то так же проще через вкладку создать всё таблицы, потом делаем дамп скелета и вставляем куда нужно
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв! Flyway надёжнее, ИМХО 😊
@user-lx4dc1ls3e
@user-lx4dc1ls3e Год назад
Долгожданное видео!!! Спасибо, Евгений за КАЧЕСТВЕННЫЙ контент👍👍👍
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв, Максим!
@Serj-ok4pm
@Serj-ok4pm Год назад
​@@EugeneSuleimanov 0:43
@Serj-ok4pm
@Serj-ok4pm Год назад
​@@EugeneSuleimanov 😊
@Serj-ok4pm
@Serj-ok4pm Год назад
​@@EugeneSuleimanov 😊
@Serj-ok4pm
@Serj-ok4pm Год назад
​@@EugeneSuleimanov 1:19 1:19
@kalivanich
@kalivanich Год назад
Лучший на ютубе!)
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв :)
@pawsdev
@pawsdev 10 месяцев назад
Очень круто!!!!
@EugeneSuleimanov
@EugeneSuleimanov 10 месяцев назад
Спасибо за отзыв!
@reestts
@reestts 11 месяцев назад
Спасибо за видео 👍
@EugeneSuleimanov
@EugeneSuleimanov 11 месяцев назад
Спасибо за комментарий!
@baxiskerimzade2690
@baxiskerimzade2690 Год назад
Супер) Спасибо
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@oldjohn1503
@oldjohn1503 Год назад
Золото просто!)
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв :)
@user-qx3jt8fw1v
@user-qx3jt8fw1v Год назад
Топ как всегда !
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@kalivanich
@kalivanich Год назад
Спасибо, супер!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@pawsdev
@pawsdev 10 месяцев назад
Не хватает только refresh token логики, хорошая идея для нового видосика на след год))
@EugeneSuleimanov
@EugeneSuleimanov 10 месяцев назад
Спасибо за комментарий и предложение :)
@user-ew1du4kp1z
@user-ew1du4kp1z Год назад
Привет. Спасибо, было очень полезно. Я у тебя уже не первый раз вижу как ты старательно проверяешь время истечения токена, но это вроде не так работает. там Jwts.parser() упадет с JwtException если токен протух и твоя логика не сработает. А в остальном очень круто!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за комментарий! Обязательно проверю этот момент, спасибо.
@alexey1930
@alexey1930 Год назад
Спасибо.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за комментарий!
@VladikBezsmertnyi
@VladikBezsmertnyi Год назад
Прикольно
@mirnijalexey2765
@mirnijalexey2765 Год назад
Спасибо, очень интересно получилось, сделал вместе с тобой!=) Может теперь напилим контроллеров на эту секьюрность?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв :) Это уже не интересно - всегда можно поиграть муже готовым движком :) Следующий этап - прокрутить другие сервисы к этому проекту.
@mirnijalexey2765
@mirnijalexey2765 Год назад
@@EugeneSuleimanov новые сервисы это отлично, будешь видео делать?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@mirnijalexey2765 планирую.
@user-dn8mt1ct9x
@user-dn8mt1ct9x 7 месяцев назад
Евгений, спасибо за работу, у Вас очень хорошее объяснение и интересный подход. Хотелось бы посмотреть, как построить систему безопасности на spring cloud webflux jwt, потому что на монолитные приложения можно найти примеры, а вот на микросервисные к сожалению нет, да и в принципе на микросервисы почему-то меньше информации.
@EugeneSuleimanov
@EugeneSuleimanov 7 месяцев назад
Спасибо за отзыв! Большой цикл по микросервисам в работе. К сожалению, по срокам не могу сориентировать из-за высокой рабочей загруженности.
@zhaslanq
@zhaslanq Год назад
Четко
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@user-og2ti2wd5o
@user-og2ti2wd5o Год назад
Неймовірно😮
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Докую за відгук!
@Az1zdev
@Az1zdev Год назад
👍👍👍
@alexshutov5442
@alexshutov5442 Год назад
Давай прикрутим кафку и ELK =) А то спрашивают много, а понимания мало)
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Можно попробовать :)
@102hem
@102hem 9 месяцев назад
Как всегда топ контент без воды спасибо! Только вопрос возник, а что там на продакшене с паролем, хоть и рест метод пост приходит разве это будет считаться безопасным? или может на фронте должен кодироваться?
@EugeneSuleimanov
@EugeneSuleimanov 9 месяцев назад
Спасибо за отзыв! https обеспечивает безопасность передачи данных.
@vadympylypchenko5801
@vadympylypchenko5801 Год назад
Спасибо большое за качетвенный контент без "воды". Как много реактивного программирования используеться в реальных проектах?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв! В моём опыте - крайне много. За последние 3 года все проекты были на «реактивщине».
@vadympylypchenko5801
@vadympylypchenko5801 Год назад
@@EugeneSuleimanov Спасибо, ого не неожиданно.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@vadympylypchenko5801 но это точно мой опыт.
@user-wn8wl9ex3d
@user-wn8wl9ex3d 6 месяцев назад
Экспирация)
@EugeneSuleimanov
@EugeneSuleimanov 6 месяцев назад
Не подобрал сходу другого слова :)
@grigorev.nikita
@grigorev.nikita Год назад
Евгений, спасибо за такой контент на русском!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв!
@mendalau3515
@mendalau3515 11 месяцев назад
А что такое секреты (secret), которые мы используем для кодирования пароля и генерации токена, и где их брать/генерировать, чтобы они были валидные. Спасибо большое за видео!
@EugeneSuleimanov
@EugeneSuleimanov 11 месяцев назад
Зависит от формата, на этом сайте есть ряд форматов: randomkeygen.com/ Спасибо за отзыв!
@alevadnaya
@alevadnaya Год назад
Евгений, супер, спасиьо огромное! Несколько вопросов, если позволите. 1. Сервис, где вы размещаете статьи, доступен под vpn? У меня из РФ не открываются ваши статьи. 2. По проекту. Как с наименьшими усилиями прикрутить к проекту ui или swagger? 3. Если использовать не postgres в качестве БД, а другую реляционную, не должно быть принципиальных изменений?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв! 1. Да, под VPN доступен - ограничения провайдера 2. Написать любой клиент под этот АПИ (ангуляр или реакт).
@InspireQuest-ru8pf
@InspireQuest-ru8pf 9 месяцев назад
Спасибо за предоставленную информацию. У меня возник вопрос относительно класса AuthenticationManager. Я не понимаю, для чего он нужен, если в коде он нигде не используется, кроме как в качестве параметра для фильтра. Можете объяснить, зачем нужно передавать этот класс туда, если мы проверяем только токен клиента в фильтре, учитывая, что метод AuthenticationManager обращается к базе данных?
@andydrummer6310
@andydrummer6310 6 месяцев назад
Спасибо за видео. Вопрос такой, можно в двух словах объяснить для чего здесь реактивность применена и вообще какой у нее практический смысл?
@EugeneSuleimanov
@EugeneSuleimanov 6 месяцев назад
Спасибо за отзыв! Производительность и стиль разработки.
@pawsdev
@pawsdev 10 месяцев назад
Хотелось бы поинтересоваться зачем 3 перегруженных generateToken? можно же все пихнуть в один метод? Вижу объяснение только в single responsability principle, гипотетически можно сделать развилку на втором методе если реализовывать рефреш логику
@slava_blin
@slava_blin Год назад
Класс! Спасибо за видео, хорошо структурирует знания, а так же много нового и интересного подчерпнул. Есть кейс: хочу настроить securityWebFilterChain таким образом, чтобы все пути было открыты, а на один конкретный путь срабатывал фильтр. Я могу заменить publicRoutes на “/**” и где-то указать тот путь, который надо прогонять через фильтр?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Большое спасибо за отзыв! Да, должно отработать по документации.
@Batyrbala
@Batyrbala Год назад
Женя, на высоте,как обычно! Рахмет,сенсей за труды,видно,что потратил время!
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Большое спасибо за отзыв!
@divergenny
@divergenny Год назад
А webflux и boot это разное получается ?) Или спринг секьюрити и там и там работает одинаково ? Просил вас видео про спринг буут и спринг секьюрити в новом формате показать, видео старое переделать )
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Да, spring boot может не использовать реактивщину. Это просто удобный Фреймворк для быстрого старта приложения с рядом преимуществ. Концепция немного другая, если мы говорим про reactive, но суть та же.
@crazym8nd
@crazym8nd 3 месяца назад
Я делал по этому гайду приложение,сначала у меня не завелось, потому, что важно при использвоании lombok и mapstruct, чтобы зависимости ломбока стояли первыми
@kalivanich
@kalivanich Год назад
Запустите курс по обучению, я полагаю будет очень востребованный от вашего авторства
@EugeneSuleimanov
@EugeneSuleimanov Год назад
По моему опыту - все курсы заканчиваются одинаково - скатывание в «г#%#нокурсы» для заработка. Поэтому работаю только через менторинг. На данный момент, я не нашёл способа масштабирования без существенного падения качества, к сожалению. И спасибо за комментарий!
@jollyroger2757
@jollyroger2757 Год назад
Gradle мне кажется лучше поднимать обращаясь к объекту wrapper и в клоужер уже указать gradleVersion='8.0.1' .
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за комментарий! Да, конечно через задачу является рекомендуемой практикой, но ручной вариант описан в документации. docs.gradle.org/current/userguide/gradle_wrapper.html#:~:text=One%20way%20to%20upgrade%20the,in%20Adding%20the%20Gradle%20Wrapper.
@jollyroger2757
@jollyroger2757 Год назад
​@@EugeneSuleimanov забыл добавить - видео как всегда на высоте
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@jollyroger2757 спасибо :)
@user-nv6vn3ol9g
@user-nv6vn3ol9g 10 месяцев назад
Большое спасибо за видео! Очень полезно! Подскажите пожалуйста, как запустить это приложение в docker-compose? Собрал бд в отдельном контейнере, все прописал, все запустилось, но не могу перейти ни по одному из эндпоинтов..
@EugeneSuleimanov
@EugeneSuleimanov 10 месяцев назад
Спасибо за отзыв! Можете уточнить по ошибкам или логам контейнеров?
@user-nv6vn3ol9g
@user-nv6vn3ol9g 10 месяцев назад
​@@EugeneSuleimanov В логах ничего нет, пробовал дебажить, при обращении к эндпоинтам вообще не доходит до контроллера.. При всем этом тот же код, запущенный без контейнеров, с локальной бд работает без проблем. Postman выдает ошибку Error: connect ECONNREFUSED 127.0.0.1:8089. Из за того, что один и тот же код работает при локальном запуске и не работает в контейнерах, напрашивается вывод, что проблема во взаимодействии с этими контейнерами.. Буду дальше копать, просто хотел уточнить, может быть такое, что к контейнеру сервиса закрыт доступ с внешних адресов? Или может быть есть особенности работы webflux, security, r2dbc, или netty в целом в контейнизированом приложении?
@hitash5395
@hitash5395 Год назад
Евгений, а вы не планируете сделать курс на юдеми часов на 20 с созданием какого-нибудь мини проекта на джаве и спринге? Я бы купил.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Все курсы планирую делать публичными, бесплатными и на ютубе. По крайней мере, на данный момент :)
@hitash5395
@hitash5395 Год назад
@@EugeneSuleimanov хорошо, буду ждать)
@OJIeLLlka
@OJIeLLlka 11 месяцев назад
Подскажите плиз, почему во вложенном классе VerificationResults поля публичные, и мы к ним обращаемся без геттеров, напрямую? 56:25
@EugeneSuleimanov
@EugeneSuleimanov 11 месяцев назад
Для удобства работы. Такой подход часто применяется для вложенных классов. Особенно на уровне DTO.
@OJIeLLlka
@OJIeLLlka 11 месяцев назад
@@EugeneSuleimanov спасибо!
@ac130kz
@ac130kz Год назад
Аннотация @Table как-то валидирует совместимость типов с базой хотя бы в рантайме? Со Spring не работал, просто как-то странно, в том же Django и SQLAlchemy, например, оно генерирует и управляется с SQL само
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Генерация SQL происходит под капотом. Но если будет несовпадение со структурой данных или типами данных - вылетит исключение.
@maximelmanov6719
@maximelmanov6719 Год назад
Спасибо за видео. Есть вопросы: Зачем были добавлены роли, если фактически они не используются? ИМХО, работу с генерацией, валидацией токена, думаю, лучше не разносить в отдельные классы(solid же). Не понял, зачем проверять токен своим велосипедом, если либа сама может это сделать?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв! 1. По ролям - просто заготовка для расширения. 2. Здесь есть несколько вариантов. Тот же S из SOLID здесь можно трактовать по-разному. Вряд ли будет однозначный ответ.
@maximelmanov6719
@maximelmanov6719 Год назад
@@EugeneSuleimanov ещё третий вопрос. Проверить токен можно одной строкой
@maximelmanov6719
@maximelmanov6719 Год назад
@@EugeneSuleimanov + как раз про второй вопрос. Из-за того что работа с токеном разнесена, в нескольких классах тащиться secret из пропертей
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@maximelmanov6719 конечно можно - это учебный пример - нужно показать более детально и понятно.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@maximelmanov6719 в проперти не вижу проблемы, если есть аргументы - было бы отлично. Могу упускать детали.
@user-xg6so1kq3z
@user-xg6so1kq3z 9 месяцев назад
+
@EugeneSuleimanov
@EugeneSuleimanov 9 месяцев назад
Как всегда, спасибо за поддержку!
@user-fd6vx9yx2l
@user-fd6vx9yx2l Год назад
Подскажите, пожалуйста, как сюда прикрутить Role based control с аноташками по типу @PreAuthorized, или как-то по другому? Второй день мучаюсь(
@user-fd6vx9yx2l
@user-fd6vx9yx2l Год назад
Помогите, плиз, хоть каким-то способом сюда Role based control внедрить
@daria3319
@daria3319 Год назад
Евгений, здравствуйте! Скажите, пожалуйста, можно ли с реализацией Security, приведенной вами, использовать аннотацию @PreAuthorize("hasAnyRole('ADMIN')") для управления доступом к методам контролеров на основании роли пользователя?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Добрый день! Да, этот подход рабочий.
@user-fd6vx9yx2l
@user-fd6vx9yx2l Год назад
@@EugeneSuleimanov Не работает с коробки(
@user-lt8vv5lk1w
@user-lt8vv5lk1w Год назад
27:09 кстати, есть момент с yaml. При его использовании среда разработки не предлагает варианты во время набора ключа, при работе с property файлом такого нет. Может знаете как заставить идею так же работать с yaml?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Интересное наблюдение, попробую изучить вопрос. И спасибо за комментарий!
@alexandr6055
@alexandr6055 8 месяцев назад
подскажите, откуда взялся секрет? Сказали, что его заранее подготовили и он валидный. Что это значит? Где его взяли и где валидировали?)
@sardartatybaev9173
@sardartatybaev9173 10 месяцев назад
Евгений можно использовать пример кода с security без реактившины?
@EugeneSuleimanov
@EugeneSuleimanov 10 месяцев назад
Спасибо за комментарий! Нет, этот подход заточен под реактивщину.
@front-endpadavan4421
@front-endpadavan4421 4 месяца назад
Немного не понял про перехват ошибок, можете пояснить зачем такой кастомный класс? Я использую @ControllerAdvice
@EugeneSuleimanov
@EugeneSuleimanov 4 месяца назад
Если я верно понял ваш вопрос, то с ним проще работать при создании гибкого механизма обработки. Например - свое DTO + получения деталей по ошибкам из БД по ключу.
@NameName-zg2kk
@NameName-zg2kk Год назад
Спасибо за урок! Но у меня возник вопрос. Вот в yaml мы красиво пишем все эти секретные данные с паролями и ссылками на БД и генерации пароля для jwt, в Гит хаб пушается этот файл и тогда все те танци с конфигурациями идут на смарку, ведь файл будут видеть все кому не лень(только если репозиторий не приватный). Сам вопрос: в не учебном(комерционном) проекте yaml не пушается в гит? И еще на засипку, SECRET_KEY_INSTANCE по идее тоже должен быть в yaml, ведь класс Encoder 100% будет запушеным в гит.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за отзыв! Обычно, эти переменные передаются как переменные среды и подтягиваются на этапе запуска.
@densusanin4415
@densusanin4415 Год назад
Общий смысл - создается локальная копия application.yml с кредами - application-local.yml, который "затирает" application.yml application-local.yml добавляем в .gitignore, теперь он не покидает локального репозитория и нужен только для локального тестирования Необходимые действия: 1) создать копию application.yml - application-local.yml указать в новом файле креды 2) Важно! - добавляем в .gitignore файл application-local.yml 3) в application добавляем spring: config: import: optional:application-local.yml для локального тестирования используется application-local.yml указываем креды не боясь, что они утекут вместе с коммитом в import: optional:application-local.yml optional - указывает что это опциональный параметр, если такого файла нет, то используется application.yml
@ns9721
@ns9721 9 месяцев назад
Подскажите пж где токен взять для авторизации в Postman?
@EugeneSuleimanov
@EugeneSuleimanov 9 месяцев назад
Создать самому через ендпоинт логина
@scheglov_danil
@scheglov_danil Год назад
Здравствуйте, что за тема у вас в IDEA?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Добрый вечер! Dracula
@scheglov_danil
@scheglov_danil Год назад
@@EugeneSuleimanov Спасибо)
@Dimonchik_Limonchk
@Dimonchik_Limonchk Год назад
У меня глупый вопрос как создать POSTGRES-LOCAL? Через DG idea? Или что-то другое, я этого никогда не делал. Не понимаю как быть.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
www.jetbrains.com/help/datagrip/postgresql.html Здесь есть делателе описание.
@Dimonchik_Limonchk
@Dimonchik_Limonchk Год назад
@@EugeneSuleimanov Сделал так: удалил все, скачал заново, установил драйвер нажал test connection ([08004] The server requested SCRAM-based authentication, but no password was provided.) ввел пароль. [28P01] �����: ������������ "dkloc" �� ������ �������� ����������� (�� ������). пришло такое.
@user-rj4lb2go8r
@user-rj4lb2go8r Год назад
У entity зря не переопредели equals и hashCode.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Если я верно вас понял, то аннотация Data включает в себя: @ToString, @EqualsAndHashCode, @RequiredArgsConstructorи @Getter + @Setter для всех не финальных полей.
@erkin7138
@erkin7138 Год назад
у Евгения Lombok, @Data включает переопределение методов для классов энтитей
@user-up2lc4kb5o
@user-up2lc4kb5o Год назад
@@erkin7138 , та же JpaBuddy не рекомендует использовать аннотацию @Data в Entity. Если схема БД чуть сложнее и в Entity присутствуют "ленивые" поля, то ломбоковское видение методов toString, equals, hashCode может привести к ухудшению производительности приложения в связи с появлением множественных запросов к БД.
@anthonya880
@anthonya880 Год назад
Is Spring Webflux gaining popularity ?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Definitely
@anthonya880
@anthonya880 Год назад
@@EugeneSuleimanov Thanks
@TomHardy-shorts
@TomHardy-shorts 8 месяцев назад
Правильно ли я понимаю, что многое вырезали в новой spring security?
@EugeneSuleimanov
@EugeneSuleimanov 8 месяцев назад
Спасибо за вопрос. Я бы сказал, что заменили.
@TomHardy-shorts
@TomHardy-shorts 8 месяцев назад
Да, скорее так. От того и вопросы появились при создании SecurityWebFilterChain))@@EugeneSuleimanov
@user-mf6uc9iw2z
@user-mf6uc9iw2z Год назад
Чтото смотрю не спешат интегрировать hibernate reactive в спринг
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Да, вы правы, не встречал такого еще.
@MrArksu
@MrArksu Год назад
почему не kotlin в 2023 году?
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Первая любовь не ржавеет :)
@user-vvvm
@user-vvvm 10 месяцев назад
Курс мне понравился. Я попробовал его реализовать в netbeans 15 (maven). При вводе регистрационных данных, postman выдает An expected CSRF token cannot be found при 403 ошибке. Не могли бы вы подсказать в чем дело ? В секюрити конфиге .csrf().disable(). Заранее благодарен.
@EugeneSuleimanov
@EugeneSuleimanov 10 месяцев назад
Сложно сказать, скорее всего ошибка в коде, а не в IDE или Maven. И спасибо за комментарий!
@user-vvvm
@user-vvvm 10 месяцев назад
Спасибо за ответ, на этот раз все получилось, причина была в том , что секюрити конфиг у меня был отдельным пакетом на одном левеле с проектом.
@EugeneSuleimanov
@EugeneSuleimanov 10 месяцев назад
@@user-vvvm рад, что все получилось!
@ruslanzubkov4297
@ruslanzubkov4297 Год назад
При клонировании и запуске проекта получаю сразу ошибку. Тем не менее спасибо за урок. Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: org.flywaydb.core.internal.exception.FlywaySqlException at JdbcUtils.java:60 Caused by: org.postgresql.util.PSQLException at ConnectionFactoryImpl.java:844
@adeskmath
@adeskmath Год назад
тоже застрял на этом моменте на ~ 15 минуте :), делал ручками как в видео из сообщений в консоли - что-то не так c авторизацией flyway, в итоге дописал user и password: flyway: url: jdbc:postgresql://localhost:5432/webflux_security locations: classpath:db/migration password: xxxxxx user: postgres после чего заработало и таблица в БД создалась, пока нет времени посмотреть дальше, может там будет объяснение (выше указ.проблемы), если нет - просьба экспертов подсказать, в чем причина и как ее решать (без дублирования как я сделал) Автору - спасибо большое, таких тем еще не видел + понятным языком. респект.
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Проверьте, что Postgres запущен если да - проверьте, что БД создана и креды корректны.
@adeskmath
@adeskmath Год назад
@@EugeneSuleimanov Postges был запущен, БД создана, а что такое "креды"? как указал ранее, сработало при добавлении 2х последних строк ниже: spring: r2dbc: url: r2dbc:pool:postgres://localhost:5432/webflux_security username: postgres password: xxxxxxx flyway: url: jdbc:postgresql://localhost:5432/webflux_security locations: classpath:db/migration password: xxxxxxx user: postgres
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@adeskmath должно отработать и без них, перепроверю, спасибо!
@raynur256
@raynur256 Год назад
Какие-то проблемы у меня со сборкой с этим flyway contextLoads() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:142 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: org.flywaydb.core.internal.exception.FlywaySqlException at JdbcUtils.java:60 Caused by: org.postgresql.util.PSQLException at QueryExecutorImpl.java:2713
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Вы можете проверить, что БД создана и username + password корректны?
@raynur256
@raynur256 Год назад
@@EugeneSuleimanov проверил это подключением с идеи
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@raynur256 попробуйте подтянуть свежую версию проекта - внёс небольшую правку.
@raynur256
@raynur256 Год назад
@@EugeneSuleimanov Сработало, спасибо. Стоило догадаться, но я так и не понимаю как у вас без этого получилось
@EugeneSuleimanov
@EugeneSuleimanov Год назад
@@raynur256 сам в недоумении ))
@anonim00723
@anonim00723 Год назад
Добрый день возникли такие ошибки не знаю как исправить org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 org.flywaydb.core.internal.exception.FlywaySqlException at JdbcUtils.java:60 org.postgresql.util.PSQLException at ConnectionFactoryImpl.java:693 There were failing tests. See the report at: file:///home/erin/IdeaProjects/webfluxsecurity/build/reports/tests/test/index.html буду рад любому ответу спасибо !
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Добрый день! Подтяните свежую версию проекта - внёс небольшую правку.
@anonim00723
@anonim00723 Год назад
@@EugeneSuleimanov Спасибо !
@user-xg6so1kq3z
@user-xg6so1kq3z Год назад
+
@EugeneSuleimanov
@EugeneSuleimanov Год назад
Спасибо за комментарий!
@user-xg6so1kq3z
@user-xg6so1kq3z Год назад
@@EugeneSuleimanov это вам благодарность!!!!!!!!!!!!
Далее
Основы работы с Spring Security
1:56:11
Просмотров 141 тыс.
Редакция. News: 121-я неделя
42:58
Просмотров 1,5 млн
Zoom x100 всего лишь маркетинг
00:41
Просмотров 267 тыс.
Мамооо 😂😂😂
00:21
Просмотров 157 тыс.
Keycloak и Spring Security
37:37
Просмотров 10 тыс.
Будущее программирования
28:16
Tutorial | Java Spring Webflux with JWT Authentication
46:02
Редакция. News: 121-я неделя
42:58
Просмотров 1,5 млн