GeekBrains: "Как устроен Spring Security" - 31.05.20

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 พ.ย. 2024

ความคิดเห็น • 108

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil ปีที่แล้ว +29

    00:00 Начало
    01:30 Создали и минимально настроили проект
    07:45 Configure: authorizeHttpRequests, antMatchers, anyRequest, formLogin,..
    17:55 Первый запуск. Логин под юзером созданным спрингом.
    22:27 Логаут
    24:42 Principal - позволяет узнать под кем зашел пользователь.
    26:01 В каком контексте спринг хранит инфу о пользователе
    31:09 Схема цепочки фильтров спринга
    33:55 *In-Memory - хранение юзеров хардкодом*
    38:37 Авторизация и переброс на страницу соответствующую юзеру
    41:07 *jdbc - хранение юзеров в базе данных.* Создание юзеров в БД хардкодом.
    45:23 Где именно в БД можно хранить юзеров.
    52:38 Authority - это право доступа. Как спринг работает с этим.
    01:01:30 *DAO Authentication - оперирование юзерами через сущности спринг.*
    DaoAuthenticationProvider. PasswordEncoder
    01:09:20 UserService - сервис по предоставлению юзеров
    01:13:12 UserDetails - содержит: имя, права, включен, просрочен
    01:14:17 Преобразование Роли в Authority
    01:16:30 Передаем UserService в DaoAuthenticationProvider
    01:19:15 Фиксим баг ленивой загрузки из-за связи один ко многим
    01:20:07 Как через Principal получить данные сущности User
    01:22:24 Схема работы Spring security
    01:32:05 Обсуждение прошлых вэбинаров в части Security
    01:33:36 Краткое словесное описание схемы
    01:34:02 Устройство JdbcUserDetailsManager
    01:38:31 Демонстрация работы фильтров в отладчике
    01:41:47 Просмотр цепочки фильтров при debug = true
    01:44:36 Защита от CSRF - межсайтовой подделки запроса (Cross-site request forgery)
    01:51:42 Ответы на вопросы

  • @ssssssy1327
    @ssssssy1327 3 ปีที่แล้ว +47

    Сделайте, пожалуйста, видео про REST и JWT. Очень понятно доносите информацию. Соглашусь, что это, наверное, самое лучшее видео по Spring Security на ютубе)

  • @SatUluBah
    @SatUluBah 3 ปีที่แล้ว +31

    Премного благодарствую... Посмотрел 1 раз - ПОЗНАКОМИЛСЯ, посмотрел 2 раз - ПОДРУЖИЛСЯ, посмотрел 3 раз - ВСЕ КАК РОДНОЕ))))

  • @mihailan8711
    @mihailan8711 3 ปีที่แล้ว +45

    Это самое идеальное объяснение Спринга из всех какие есть на TH-cam.

    • @b.g.5106
      @b.g.5106 3 ปีที่แล้ว +4

      а как же гоша дударь ? 😆

    • @kuzd4niil
      @kuzd4niil 3 ปีที่แล้ว +1

      Есть ещë amigos code, но там английский

  • @МаксимСамойлов-р6ф
    @МаксимСамойлов-р6ф ปีที่แล้ว +5

    Очень хороший урок! Авторy огромная благодарность👍👍👍

  • @forit4861
    @forit4861 3 ปีที่แล้ว +9

    Очень долго искал хороший материал по Spring Security и вот я его нашел огромное спасибо!!!!!!

  • @Devivl
    @Devivl ปีที่แล้ว

    Доброго дня! Случайно попал на Ваше видео. Александр, Вы безусловно потрясающе доносите информацию. Очень внимательно к деталям. Однозначно присоединяюсь к Вашему творчеству и буду смотреть остальные видео!

  • @GT-cv3xu
    @GT-cv3xu 3 ปีที่แล้ว +3

    Спасибо Вам за Вашу работу, мне очень помог этот материал!

  • @HinoRaita
    @HinoRaita 2 ปีที่แล้ว +1

    спасибо большое за видео, очень помогло разложить всё по полочкам в голове.

  • @АлександрБрейво-з6р
    @АлександрБрейво-з6р 8 หลายเดือนก่อน

    Отличное преподнесение информации, спасибо!!!

  • @user-gv1ff3ex5y
    @user-gv1ff3ex5y 2 ปีที่แล้ว

    Это лучшее руководство по Spring Security. Спасибо!

  • @alekseizhitenev6020
    @alekseizhitenev6020 2 ปีที่แล้ว

    большое спасибо за подробное видео, очень помогает изучать, как это все работает!

  • @АнтонПономарев-ю5я
    @АнтонПономарев-ю5я 2 ปีที่แล้ว +2

    Спасибо огромное за видео, по настоящему понятно стало, до этого неделю сидел, смотрел видео другие пытался разобраться и все было магией.
    очень жду еще видео про спринг секьюрити и AUTH2.0 с использованием сторонних сервисов, если можно то с ВК апи, ибо про него совсем мало гайдов

  • @yaffisar4404
    @yaffisar4404 ปีที่แล้ว

    не с первого раза, но понял, Отличная подача, спасибо вам!

  • @johnathanjormungand
    @johnathanjormungand 3 ปีที่แล้ว +2

    Спасибо, что рассказываете, как оно всё работает внутри, да ещё и с картинками. Так некоторый хаос информационный в голове укладывается лучше.
    Кстати, привет Вам, с самого первого Вашего потока, по Java GB (lvl 3), из 2016г :)

    • @Неспиш-й9х
      @Неспиш-й9х 3 ปีที่แล้ว

      Можешь ссылки скинуть на эти уроки!

  • @just_a_simple_man
    @just_a_simple_man 3 ปีที่แล้ว +21

    Материал настолько крутой, что я даже скачал себе видео)

    • @anthonystain4168
      @anthonystain4168 3 ปีที่แล้ว

      да, а то они могут передумать и удалить видео с ютюб)

    • @ladysoverschenstvo7875
      @ladysoverschenstvo7875 3 ปีที่แล้ว

      А через какую программу вы скачиваете?

    • @Zel4j
      @Zel4j 3 ปีที่แล้ว

      @@ladysoverschenstvo7875 savefrom сайт открой

  • @konstantinchvilyov9602
    @konstantinchvilyov9602 2 ปีที่แล้ว

    Спасибо за объяснение загадочного устройства Spring Security!

  • @listopaddd
    @listopaddd ปีที่แล้ว

    Очень понятное объяснение Spring Security. Большое спасибо!

  • @АлександрБуров-н3р
    @АлександрБуров-н3р ปีที่แล้ว

    Спасибо за объяснение Spring Security!

  • @Krasnolesye
    @Krasnolesye 2 ปีที่แล้ว

    Интересно было послушать. Спасибо большое и за "работу под капотом" - отдельное ))
    Молодца

  • @shushanbalayan6267
    @shushanbalayan6267 4 ปีที่แล้ว +3

    спасибоооооо.. пожалуйта продолжаете))

  • @АлексейМилованов-д8т
    @АлексейМилованов-д8т ปีที่แล้ว

    Отлично видео, спасибо. После 3-хкратного просмотра становится понятнее)

  • @FlameXander
    @FlameXander  4 ปีที่แล้ว +14

    Ссылка на исходники: drive.google.com/file/d/1TgvfG5s5bSk9sedUfP8I7CCgO3F7-tyV/view?usp=sharing

    • @РенасРахимов
      @РенасРахимов 4 ปีที่แล้ว +3

      а можете еще sql.txt, из которого вставляли код для создания таблиц, дать?

    • @FlameXander
      @FlameXander  4 ปีที่แล้ว +10

      @@РенасРахимов можете вот по этой ссылке скачать исходники: drive.google.com/file/d/18gL8N2xsXSXLLjzcWOavoSqFc65P9fFk/view?usp=sharing . В этом варианте я разделил варианты настройки безопасности на 4 варианта: самый простой, in-memory, jdbc и dao. И каждый из этих вариантов включается через соответствующий профиль. В папках db/migration можно найти sql скрипты. В Main классе в комментариях написано как указать профиль

    • @РенасРахимов
      @РенасРахимов 4 ปีที่แล้ว +2

      @@FlameXander спасибо!

  • @nursboot1186
    @nursboot1186 3 ปีที่แล้ว +5

    Ждем JWT auththentication

  • @Alexander-pt1ye
    @Alexander-pt1ye 3 ปีที่แล้ว +2

    Спасибо за шикарный материал!

  • @lifeisanadventure8951
    @lifeisanadventure8951 10 หลายเดือนก่อน

    Огромное спасибо!

  • @oleksa537
    @oleksa537 2 ปีที่แล้ว +2

    отличный урок. Я просто удивляюсь, каким образом это все можно узнать из документации?
    Я просто пытался изучить документацию, но даже близко всего этого не понял, хотя все дают совет изучить фрейсворки по документации. Как это правильно делать? Где в документации описано все это? Поделитесь советом кто-нить.

  • @ildarjava7979
    @ildarjava7979 3 ปีที่แล้ว

    Подробно, четко и без воды.

  • @xz8928
    @xz8928 2 ปีที่แล้ว +1

    А можно где-то посмотреть исходный код магазина на спринге ,про который упоминали в видео ?

  • @isko_vlog6836
    @isko_vlog6836 3 ปีที่แล้ว

    Красавчики еще добавили исходник код спасибоо еще таких много видео ждем

  • @mohen-tohen
    @mohen-tohen ปีที่แล้ว

    поделитесь, пожалуйста, другими частями данного курса

  • @mathtime2812
    @mathtime2812 3 ปีที่แล้ว +3

    Отличный видео-разбор Spring Security! Будет ли подобное видео по разбору OAuth2 аутентификации в классическом виде на каком-нибудь Provider-service, который не идет из коробки с Security или с использованием отдельно реализованного сервера аутентификации?

  • @vladislavosipenkov1412
    @vladislavosipenkov1412 2 ปีที่แล้ว

    Как попасть к вам в группу чтобы посмотреть про магазин на спринге и прочее? (oauth, jwt)

  • @egomate
    @egomate หลายเดือนก่อน

    спасибо!

  • @neonzoff
    @neonzoff 3 ปีที่แล้ว +2

    А есть в планах Spring Boot + JWT + React? Совсем нет информации на русском :)

  • @pavelminsk
    @pavelminsk ปีที่แล้ว

    Спасибо, очень круто!

  • @rustamgulyamov4091
    @rustamgulyamov4091 2 ปีที่แล้ว

    Большое спасибо!

  • @DevPlayGame
    @DevPlayGame 2 ปีที่แล้ว

    А как без spring boot заиспользовать правильно security? Было бы видио по такой теме - совсем огонь был бы)

  • @evgeniysibirev3923
    @evgeniysibirev3923 3 ปีที่แล้ว

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

  • @dusheslov2700
    @dusheslov2700 3 ปีที่แล้ว

    Саша это тебе команда поменять кодировку в SQL Shell \! chcp 1251 спасибо за урок большое!)

  • @goodvideobro
    @goodvideobro 10 หลายเดือนก่อน

    хорошая подача

  • @СвятолавПанифидкин
    @СвятолавПанифидкин 4 ปีที่แล้ว +2

    Божественно)

    • @sirdee394
      @sirdee394 4 ปีที่แล้ว

      Мммм веб разраб)

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil ปีที่แล้ว +1

    Кому здесь совсем не понятно, я рекомендую на канале jusaf посмотреть "Изучаем Spring Security. Часть 0. Как написать свой Spring Security"
    а потом вернуться сюда

  • @ровойт
    @ровойт 7 หลายเดือนก่อน

    а есть где-то видео автора про интернет-магазин?

  • @ЕвгенийХайбулин-я4е
    @ЕвгенийХайбулин-я4е ปีที่แล้ว

    интересно а как через даопровайдер юзеров создавать с ролями и паролем и именем, без jdbc

  • @mohen-tohen
    @mohen-tohen ปีที่แล้ว

    есть ли какое-то продолжение по спринг секьюрити с jwt?

  • @russianbrain3631
    @russianbrain3631 2 ปีที่แล้ว

    Отличное видео, спасибо 👍

  • @ivanfedin9094
    @ivanfedin9094 2 ปีที่แล้ว

    Спасибо за видео! Всё больше проясняется тонкостей. Подскажите пожалуйста, зачем инжектить зависимости через конструктор? Прекрасно же работает через поля. Это код стайл такой, или есть более глубокий смысл?

  • @markkraskovskii2051
    @markkraskovskii2051 3 ปีที่แล้ว

    Спасибо за хороший материал.
    Аннотацию @Autowired, необязательно писать над конструктором, спринг и без аннотации подхватывает bean

  • @mohen-tohen
    @mohen-tohen ปีที่แล้ว

    это какой-то курс или что? где можно посмотреть всё остальное?

  • @MaximBodrov
    @MaximBodrov ปีที่แล้ว

    Спасибо! Очень доходчиво. Не совсем понятно, если пользователь авторизировался на сайте банка и теперь он со своим JSESSIONID ходит по всем страничкам банка, каким образом он случайно попадет на страничку злоумышленника???? Т.е. вариант вероятно такой, что уйдя со страницы банка и случайным образом нажав на левую ссылку, пользователь попадает на страничку очень похожую на страницу банка?? В таком случае как сервер злоумышленника перенаправит "плохой" запрос на сайт банка? JS-скрипт делает этот редирект? Если так, то в какой момент браузер клиента подставляет тот самый JSESSIONID, ведь при JS-редиректе не получится подставить валидный JSESSIONID

    • @Insectus11
      @Insectus11 2 หลายเดือนก่อน

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

  • @viptutorials
    @viptutorials 2 ปีที่แล้ว +1

    Здравствуйте, спасибо за видео. Как можно авторизоваться не по имени человека а по email?
    Просто могут быть люди с одинаковыми именами.

    • @FlameXander
      @FlameXander  2 ปีที่แล้ว +3

      Вечер добрый, username это же имя пользователя в системе, в БД его надо делать уникальным и тогда два разных человека не смогут создать пользователей с одинаковый username'ом. Подвязать email можно в качестве логина пользователя, для этого в реализации UserDetailsService в имя (первый аргумент конструктора) org.springframework.security.core.userdetails.User кладете не user.getUsername(), а user.getEmail().

    • @viptutorials
      @viptutorials 2 ปีที่แล้ว

      @@FlameXander Спасибо вам огромное, очень хорошо объясняете лайк с меня.

  • @jurii4555
    @jurii4555 10 หลายเดือนก่อน

    хтось може сказати як долучитися до телеграм чату і де є проект веб магазину на спрінгу

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil ปีที่แล้ว

    в пайнте это мышью пишите или стилусом?

  • @dusheslov2700
    @dusheslov2700 3 ปีที่แล้ว +1

    Александр можно ли как с вами связаться?

  • @maksymmatlo4327
    @maksymmatlo4327 3 ปีที่แล้ว +1

    Спасибо за туториал! Очень хорошее обьяснение!
    Получаю ошибку - Encoded password does not look like BCrypt
    А вот и решение - new BCryptPasswordEncoder().encode(password) - пароль нужно получать через этот энкодер

  • @ДмитрийПохлебаев-н8ы
    @ДмитрийПохлебаев-н8ы 2 ปีที่แล้ว

    Очень крутое видео , спасибо большое !
    Вопрос 1, когда допустим UserDetail нашёл юзера в базе, DaoProvider сверил имя и пароль и если все ок обратно по цепочке возвращается токен в котором UserDetails и Authorities, а на каком этапе происходит проверка роли или прав для доступа к страницам, на том же где и сверка имени и пароля ?

  • @davidjoker3619
    @davidjoker3619 3 ปีที่แล้ว

    А где хранятся csrf токены тогда? Не в куках?

  • @samirahm4dov
    @samirahm4dov 11 หลายเดือนก่อน

    👍

  • @dimasamsonau3646
    @dimasamsonau3646 3 ปีที่แล้ว +1

    оч круто, спасибо!)
    А можно где-то посмотреть видео с сентября, декабря? там про интернет-магазин или что-то мелькало.. большой такой проект, интересно было бы посмотреть, спасибо!)

  • @astracode7955
    @astracode7955 2 ปีที่แล้ว

    Отличный урок!!!! А на гите код не лежит?

  • @DevPlayGame
    @DevPlayGame 2 ปีที่แล้ว

    Где можно скачать код проекта и посмотреть? У меня с datasource проблемы, может что то пропустил.Заранее спасибо!

    • @DevPlayGame
      @DevPlayGame 2 ปีที่แล้ว

      Нашел) Тут выход если кому будет нужно: www.baeldung.com/spring-boot-configure-data-source-programmatic

  • @demosinternet7455
    @demosinternet7455 3 ปีที่แล้ว

    Александр, дополню ваше объяснение по csrf токену и предложу улучшенный алгоритм. На страницу вставляем яваскрипт код который отсылает запрос в банк на получение формы оплаты. Сервер банка по живому джисэшн куки отдаёт форму с свежим csrf токеном, далее парсим полученное тело, вытаскиваем csrf и вставляем в свою фору, отправляем обратно в банк нужный пост

    • @alexgorodecky1661
      @alexgorodecky1661 10 หลายเดือนก่อน

      Да, не работает все это. Однако, CORS решает все эти проблемы, и по умолчанию он включен

  • @valeriyemelyanov9090
    @valeriyemelyanov9090 4 ปีที่แล้ว

    Круто!!! Спасибо!!!

  • @isko_vlog6836
    @isko_vlog6836 3 ปีที่แล้ว

    ты проста брат пушка

  • @olenaqwerty7895
    @olenaqwerty7895 3 ปีที่แล้ว

    супер!

  • @konstantinchvilyov9602
    @konstantinchvilyov9602 2 ปีที่แล้ว

    Спасибо. Не встречал лучшего объяснения.
    Было бы ещё понятнее при переводе английских названий на русский язык. Поскольку каждое английское слово может иметь несколько разных значений. Без этого получается абстрактное(отвлечённое) представление о понятиях и устройстве. Поскольку для большинства слушателей "Принципал с авторитис" звучит как "Штука с фиговинами".

    • @oleksa537
      @oleksa537 2 ปีที่แล้ว +1

      как можно изучать программирования без элементарных знаний английского?
      В таком случае для таких слушателей и "Стринг и интежер" звучит как "стринги с инжиром".

    • @konstantinchvilyov9602
      @konstantinchvilyov9602 2 ปีที่แล้ว

      @@oleksa537 String и Integer - базовые понятия языка Java.
      И большинство программистов понимают их смысл, даже если не знают перевода на русский язык.
      Principal и Authotities встречаются значительно реже. И я думаю, что большинство программистов на момент слушания этого доклада не знали как они переводятся на русский. А из тех что знали, многие не могли однозначно выбрать значение, подходящее в этом случае.
      Давайте проведём простой эксперимент: вы напишете здесь как надо точно переводить эти слова на русский язык в этой лекции? Лучше сходу, без заглядывания в словарь.
      А потом мы с Вами вместе выясним, насколько точен был Ваш перевод. Согласны?

  • @ВладиНайз
    @ВладиНайз ปีที่แล้ว +1

    Гаврюша задолбал

  • @andriymr.x8175
    @andriymr.x8175 3 ปีที่แล้ว +2

    Супер!
    Коли буде наступне відео про Spring Security ?

  • @rudolfsikorsky7900
    @rudolfsikorsky7900 3 ปีที่แล้ว

    А вот если максимально упростить? Допустим, нет разных ролей, все пользователи одинаковы. Можно обойтись без таблицы roles? Откуда тогда брать авторитиз? Там обязательно требуется коллекция, которую надо делать из коллекции ролей? Или есть какие-то по умолчанию?
    Я делал по образцу из другого видео и убрал роли из БД, а в коде их захардкодил, Но что-то ни хрена не вышло, всё время получаю 403, видимо что-то упустил :(
    Мне кажется, в объяснении надо идти от простого к сложному:
    - вот одинаковые пользователи и вот ресурсы, которые им доступны;
    - а теперь давайте разграничим им права, добавив роли.
    Так будет понятнее, КМК.

    • @serjpavlenko
      @serjpavlenko 3 ปีที่แล้ว +1

      вероятно, неправильно настроили authorizeRequests() в методе `public void configure(HttpSecurity http) throws Exception{...}`.
      На будущее, кидайте код, хотя бы через pastebin.com

  • @belarus_by2089
    @belarus_by2089 2 ปีที่แล้ว

    super!

  • @stuff199488
    @stuff199488 2 ปีที่แล้ว +4

    deprecated video, WebSecurityCinfigurerAdapter is deprecated (устарел)!

  • @aleksandrchekushov5573
    @aleksandrchekushov5573 4 ปีที่แล้ว +3

    Господи. Ну пожалуйста пишите в названии что ваше видео относиться к Spring Boot. Пытаюсь понять SpringMVC + Security и все время на boot попадаю.

    • @Пользователь754
      @Пользователь754 3 ปีที่แล้ว

      получилось найти хороший ресурс для изучения SpringMVC + Security ?

    • @aleksandrchekushov5573
      @aleksandrchekushov5573 3 ปีที่แล้ว

      @@Пользователь754 Не... все надергал по крупицам. То там то тут...

    • @b.g.5106
      @b.g.5106 3 ปีที่แล้ว

      @@aleksandrchekushov5573 у Специалиста были курсы по MVC

    • @lindx2533
      @lindx2533 3 ปีที่แล้ว +1

      исусе, а какая разница то? подключи Не springboot библиотеки

    • @aleksandrchekushov5573
      @aleksandrchekushov5573 3 ปีที่แล้ว +1

      @@lindx2533 огромная. тотже SpringSecurityInitializer в буте вообще не нужен. А не в буте без него ничего пахать не будет.
      Контекст в буте тоже подругому конфигурируется. Там еще тонна подводных камней.
      Вы пробовали запускать секьюрити с бутом и без бута? Да 99% там одинаковы. Но в 1% подводных камней кроятся самый сок.
      Boot это как бы автонастройщик. Авто он на то и авто что он многое делает автоматически. Без бута вам самому надо собирать контекст. Извещать контекст о секьюрити. и т д и т п.

  • @ogo007
    @ogo007 3 ปีที่แล้ว

    thank

  • @JMunkush
    @JMunkush 2 ปีที่แล้ว

    Каждый раз когда я пишу код : 50:25

  • @denfal555
    @denfal555 2 ปีที่แล้ว

    28:59 SecurityCintextHolder Pic

  • @ekaterinaivanova9873
    @ekaterinaivanova9873 ปีที่แล้ว

    без гитхаба как-то скучно

  • @ekaterinaivanova9873
    @ekaterinaivanova9873 ปีที่แล้ว

    а как посмотреть сгенерированный пароль если логи стерты?

    • @FlameXander
      @FlameXander  ปีที่แล้ว

      Речь про то, когда пользователь автоматически создается Спрингом? Если да, то при каждом запуске пароль будет новый генерироваться (так как это тестовый пользователь)

  • @pavelkhmialinka6602
    @pavelkhmialinka6602 3 ปีที่แล้ว

    +

  • @ИгорьПозигун
    @ИгорьПозигун 2 ปีที่แล้ว

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

  • @Vladimir-vd2im
    @Vladimir-vd2im 11 หลายเดือนก่อน +1

    А есть запись вебинара, где вы делали магазин?