Очень крутое видео! Все четко, структурировано и в меру детализированно! Благодарю за такой качественный контент! Особенно понравилось объяснение на Sequence диаграммах :)
Огромное спасибо за ролик и отдельно и гагинское спасибо про момент с Basic аутентификаций. До этого ролика рвал волосы на голове пытаясь осознать как фронт может работать с моим REST Api. Каждый раз отправлять пароль ? А оказалось, что современные браузеры умеют работать c Basic аутентификаций. Спасибо человеческое ))) Лайк, подписка
Бро привет, слушай в начале этого ролика ты говорил что ты не умеешь вести долгие и интересные ролики, слушай я с тобой в корни не согласен так как ты очень умный и крутой чувак который понял как это работает и это круто, у тебя абалденно получается преподносить людям инфу такой какая она есть, я сам являюсь джавистом и скажу честно не каждый как говориться так сможет))) по этому я честно надеюсь что ты прочтешь мой коммент из тысячи других и запишеш длинный видос по хотя бы разбору одной темы из секьюрити)). Давай бро делай дальше в том же духе )) не останавливайся
спасибо огромное за курс. полезно узнать что за что отвечает и в каком контексте существует еще только на самом начале, но пользы намного больше, чем от всех обучающих статей baeldung
Я редко пишу комментарий под туториалами ибо они полный шлак, а с этим туториалом все намного иначе, спасибо тебе за то что делишься со своими знаниями, желаю тебе всего наилучшего! (кстати советую заранее готовить диаграммы чтобы сэкономить время)
Привет, спасибо за данный контент, продолжай в том же духе, очень все понятно и грамотно объяснил. Думаю даже через много лет, к этому видео будут обращаться. Сам хотел бы делать контент по Java и если делать то равняться точно стоит на тебя, еще раз спасибо
Александр, ты один из не многих профессионалов, кто отвечает на вопросы - попытаюсь воспользоваться этим чудом в шкурных целях )). На данный момент все найденные мной материалы по Spring Security напоминают сборник рецептов: "взять такой-то класс и переписать метод так-то, а если описать такой-то бин - то получится вот-так" - но это не дает понимания как работает вся кухня - есть ли человеческое описание архитектуры? (копаться в коде примеров с отладчиком для меня оказалось тоже малорезультативным занятим для понимания архитектуры). Еще раз спасибо за информацию.
Ну вообще в документации Spring Security есть вполне подробное описание архитектуры как фреймворка в целом, так и его отдельных частей. Фреймворк и фильтры: docs.spring.io/spring-security/reference/servlet/architecture.html Аутентификация: docs.spring.io/spring-security/reference/servlet/authentication/architecture.html Авторизация: docs.spring.io/spring-security/reference/servlet/authorization/architecture.html
Подскажите, пожалуйста, если это разборы для разработчиков уровня Junior (?), то какие бы Вы материалы рекомендовали для pre-Middle и Middle по Spring Framework? Спасибо за качественные видео.
Подскажите, если сталкивались. А если например нужно 2-е конфигурации безопасности. Например для одной версии сервиса api-key, для другой версии и его методов аутентификация по JWT. Как это можно раз рулить в рамках одного приложения?
@@shurik_codes Если например Order(1) у JWT, то вызывается только конфигурация JWT. Если установить на API-KEY Order(1) а на JWT 2 то срабатывает конфигурация только для API-KEY, а все методы закрытые JWT вызываются анонимом. Как должна описываться конфигурация чтобы этого не было? Если видели такое. В зависимости от Order разный набор фильтров, ну т.е. они не объединяются
Вот не локальном ldiff фацле вме работает. А вот на реальном домене ,- на хоть ты плачь Может подскажете или покажете как прикрутить к реальному домену аутентификацию??? Как-то очень тяжело это даётся. В сети информации море и я уже виней просто тону. Заодно может подскажете как можно домен сделать. Может виртуалка какая, но только не ldiff файл
1. Создаёшь JSON-файл (пусть будет properties.json) 2. В начале файла-диаграммы загружаешь содержимое в переменную: !$props = %load_json("properties.json") 3. В нужном месте вставляешь значение из переменной: $props.foo
Здравствуйте. Подскажите, как вы смотрите документацию по классам, интерфейсам, методам в среде разработки (если это среда разработки)? Если это не в среде разработки, то как вы смотрите и где это? Я имею в виду, где описание зелеными буквами написано. Я новичок в java.
Сложно сказать, вот сейчас кажется, чего проще - взять да прочитать спецификации и документацию. Ан нет, на всё нужно время, и на теорию, и на практику и на отработку навыков.
А разве передача пороля и логин должна быть через POST, а не GET, так как данные, отправленные через POST, включаются в тело запроса и не отображаются в URL, что делает их менее уязвимыми к случайному или преднамеренному раскрытию через логи сервера или историю браузера?
А относительно чего вопрос? При использовании формы - да, нужно передавать только в POST-запросе. Basic-аутентификация подразумевает передачу логина и пароля в HTTP-заголовке запроса Authorization, поэтому такой вариант допустим с любыми HTTP-методами, включая GET.
Привет. Тут нависает проблема, мне идея пишет, что 'httpBasic()' и некоторые другие методы устарели и скоро будут удалены. Использую последнюю версию Security. Есть ли аналоги метода и можно ли как-нибудь исправить это? Или лучше перейти на более старую версию фреймворка?
Да, в Spring Security с версии 6.1 некоторые DSL-цепочки отмечены как @Deprecated и будут удалены в следующей мажорной версии фреймворка - 7.0. Вместо них предполагается использовать DSL с лямбда-выражениями. В случае с той же Basic-аутентификацией код станет примерно таким: http.httpBasic(httpBasic -> httpBasic.realmName("...")...). В общем, всё, что было между началом цепочки методов DSL (httpBasic() в данном случае) и концом (and()) теперь переезжает внутрь лямбда-выражения. Вот тут подробнее: docs.spring.io/spring-security/reference/migration-7/configuration.html
Уязвимость токенов можно снизить, используя защищённые соединения и сохраняя их на стороне клиента в безопасном месте, например в куках с параметрами Secure, HttpOnly и SameSite=Strict, если речь идёт о браузере. Собственно, сессионные куки желательно тоже с такими параметрами сохранять. Популярность токенов как таковых связана с развитием сервисов и протоколов единого входа (Single Sign-On, SSO), таких как OAuth, OpenID, OIDC, CAS. В процессе аутентификации к сервису аутентификации обращается как пользователь из клиентского приложения, так и целевой сервис, к которому пользователь пытается получить доступ. Использовать стандартную HTTP-сессию в данном случае не получится, хотя состояние между запросами нужно передавать, и для этого хорошо подходят токены. Токен позволяет не акцентировать внимание на способах хранения сессии в распределённых решениях. Хотя это можно решить хранением сессионных данных в базах данных, как это сделано в Spring Security.
Здравствуйте. Как победить ошибку, которая выпадает на 30:40 в видео? status=999. Пользователь вроде авторизуется, при повторном входе не страницу это видно, но первый раз при авторизации выпадает эта ошибка.
Если память меня не подводит, то это происходит потому что до этого я использовал в сессии браузера BASIC-аутентификацию, в результате чего данные BASIC-аутентификации сохранились в браузере, и при попытке входа при помощи формы одновременно используются два способа: BASIC и форма. Чтобы такого не происходило, способы аутентификации нужно разводить по разным цепочкам фильтров безопасности.
@@shurik_codes что то навело на такие мысли. хотя сейчас смотрю - используется Chain.. пока отложил изучение, на днях проанализирую. Извиняюсь, если был не прав.
По этому видео сразу понятен твой профессионализм. Все очень емко и понятно! Продолжай снимать дальше!
Когда я увидел, что у тебя даже визуализация написана через код, я прифегел конечно😂 сразу видно хорошего программиста
Скорее ленивого) Мне проще накидать схему в PlantUML, чем где-то нарисовать)
@@shurik_codes прикольный плагинчик, надо будет затестить
Молдчина!!! Все четко понятно! Без воды, прятно тебя слушать!!!
Очень крутое видео! Все четко, структурировано и в меру детализированно! Благодарю за такой качественный контент!
Особенно понравилось объяснение на Sequence диаграммах :)
Ролик шедевр, час прошел незаметно
Шурик, принимай вагон благодарности! Очень приятно и интересно слушать. Потрясающий фристайл владения диаграммами %)
Супер, очень полезный урок, наконец-то все встает на свои места, очень много знаете и хорошо умеете передавать свои знания, большое спасибо!
Огромное спасибо за ролик и отдельно и гагинское спасибо про момент с Basic аутентификаций. До этого ролика рвал волосы на голове пытаясь осознать как фронт может работать с моим REST Api. Каждый раз отправлять пароль ? А оказалось, что современные браузеры умеют работать c Basic аутентификаций. Спасибо человеческое ))) Лайк, подписка
Бро привет, слушай в начале этого ролика ты говорил что ты не умеешь вести долгие и интересные ролики, слушай я с тобой в корни не согласен так как ты очень умный и крутой чувак который понял как это работает и это круто, у тебя абалденно получается преподносить людям инфу такой какая она есть, я сам являюсь джавистом и скажу честно не каждый как говориться так сможет))) по этому я честно надеюсь что ты прочтешь мой коммент из тысячи других и запишеш длинный видос по хотя бы разбору одной темы из секьюрити)). Давай бро делай дальше в том же духе )) не останавливайся
Большое спасибо, за отличный материал! Очень-очень понравилось! Наконец получилось разобраться с архитектурой Spring Security
Моя золотая находка, спасибо вам - очень доходчиво и понятно объясняете)
Как же мне повезло что я вовремя нашел ваш канал, лучший канал про джаву и программирование в целом
Боже, это очень классный видос, я обязательно посмотрю их все. Спасибо вам, классная подача. И заодно узнал об диаграммах, что их можно писать так) ❤
Спасибеще тебе уважаемый! как раз грызу эту тему ))
спасибо огромное за курс. полезно узнать что за что отвечает и в каком контексте существует
еще только на самом начале, но пользы намного больше, чем от всех обучающих статей baeldung
Спасибо за такой качественный и полезный контент 👍🏻
Как мне раньше этого твиде не хватало спасибо хорошая работа.
Спасибо за наглядность 🤝 без лишнего, приятный голос, топ ;D
лучшее видео про security, спасибо за объяснение!
Спасибо за подробное объяснение)
Поддержал на бусти
Сообщение в поддержку крутого канала. Так держать.
Благодарю за полезную информацию. Очень структурировано.
Отличная серия спасибо за труд ❤
Шурик! Классное видео! Ты мне очень помог! 😀
Thanks bro, ochen khoroshiy video urok🤝
Все понятно, большое спасибо!
Лично мне нравятся видосы на этом канале: информативные, свежая инфа, довольно хорошая подача! МБ автор в дальнейшем откроет себя, как ментора?!!!
Отличное видео, спасибо за контент
Я редко пишу комментарий под туториалами ибо они полный шлак, а с этим туториалом все намного иначе, спасибо тебе за то что делишься со своими знаниями, желаю тебе всего наилучшего! (кстати советую заранее готовить диаграммы чтобы сэкономить время)
Отличный материал, спасибо
Спасиб тебе, уважаемый! )))
Привет, спасибо за данный контент, продолжай в том же духе, очень все понятно и грамотно объяснил. Думаю даже через много лет, к этому видео будут обращаться. Сам хотел бы делать контент по Java и если делать то равняться точно стоит на тебя, еще раз спасибо
Спасибо!🤝
изучил канал, подписочка получаетсы).
Александр, ты один из не многих профессионалов, кто отвечает на вопросы - попытаюсь воспользоваться этим чудом в шкурных целях )). На данный момент все найденные мной материалы по Spring Security напоминают сборник рецептов: "взять такой-то класс и переписать метод так-то, а если описать такой-то бин - то получится вот-так" - но это не дает понимания как работает вся кухня - есть ли человеческое описание архитектуры? (копаться в коде примеров с отладчиком для меня оказалось тоже малорезультативным занятим для понимания архитектуры). Еще раз спасибо за информацию.
Ну вообще в документации Spring Security есть вполне подробное описание архитектуры как фреймворка в целом, так и его отдельных частей.
Фреймворк и фильтры: docs.spring.io/spring-security/reference/servlet/architecture.html
Аутентификация: docs.spring.io/spring-security/reference/servlet/authentication/architecture.html
Авторизация: docs.spring.io/spring-security/reference/servlet/authorization/architecture.html
Подскажите, пожалуйста, если это разборы для разработчиков уровня Junior (?), то какие бы Вы материалы рекомендовали для pre-Middle и Middle по Spring Framework? Спасибо за качественные видео.
- Сколько раз пересмотрел?
- Да
Благодарю!!!
лайк, коммент, некст!
Большое спасибо за видео!
а есть ли ссылка на гитхаб?
Нет, к сожалению, примеров кода к данном ролику нет
Подскажите пожалуйста, какую операционную систему вы используете?
Linux Mint
Подскажите, если сталкивались. А если например нужно 2-е конфигурации безопасности. Например для одной версии сервиса api-key, для другой версии и его методов аутентификация по JWT. Как это можно раз рулить в рамках одного приложения?
Два компонента SecurityFilterChain с разными @Order и разными настройками
@@shurik_codes Если например Order(1) у JWT, то вызывается только конфигурация JWT. Если установить на API-KEY Order(1) а на JWT 2 то срабатывает конфигурация только для API-KEY, а все методы закрытые JWT вызываются анонимом. Как должна описываться конфигурация чтобы этого не было? Если видели такое. В зависимости от Order разный набор фильтров, ну т.е. они не объединяются
Нужно развести цепочки фильтров безопасности так, чтобы каждая из них обрабатывала только свои запросы при помощи HttpSecurity.securityMatcher()
@@shurik_codes получается маппинг написан не уникальный и при вызове используется анонимный вызов?
Вот не локальном ldiff фацле вме работает. А вот на реальном домене ,- на хоть ты плачь
Может подскажете или покажете как прикрутить к реальному домену аутентификацию??? Как-то очень тяжело это даётся. В сети информации море и я уже виней просто тону. Заодно может подскажете как можно домен сделать. Может виртуалка какая, но только не ldiff файл
Признаться честно, я далеко не сразу понял, что речь идёт о LDAP-аутентификации. Возможно, эта тема будет освещена в недалёком будущем.
У вас в текстовом файле для диаграммы запросов-ответов хардкодный localhost:8080 . Это можно сделать на основе проперти из другого файла?
1. Создаёшь JSON-файл (пусть будет properties.json)
2. В начале файла-диаграммы загружаешь содержимое в переменную: !$props = %load_json("properties.json")
3. В нужном месте вставляешь значение из переменной: $props.foo
Здравствуйте. Подскажите, как вы смотрите документацию по классам, интерфейсам, методам в среде разработки (если это среда разработки)? Если это не в среде разработки, то как вы смотрите и где это? Я имею в виду, где описание зелеными буквами написано. Я новичок в java.
ctrl+левая кнопка мыши по классу/интерфейсу/методу и т.д. в любой IDE
@@shurik_codes спасибо
@@shurik_codes еще заметил, что вы ищете документацию по классам в строке поиска. не подскажете как это сделать?
2 раза Shift
здравствуйте! Подскажите, пожалуйста, что за плагин у вас установлен, который делает из == один единый вытянутый символ =
В настройках редактора - шрифт, включить поддержку лигатур
@@shurik_codes спасибо большое
адаптация под два монитора ^_^
сколько лет опыта надо, чтобы все это в голове держать?
Сложно сказать, вот сейчас кажется, чего проще - взять да прочитать спецификации и документацию. Ан нет, на всё нужно время, и на теорию, и на практику и на отработку навыков.
А разве передача пороля и логин должна быть через POST, а не GET, так как данные, отправленные через POST, включаются в тело запроса и не отображаются в URL, что делает их менее уязвимыми к случайному или преднамеренному раскрытию через логи сервера или историю браузера?
А относительно чего вопрос? При использовании формы - да, нужно передавать только в POST-запросе. Basic-аутентификация подразумевает передачу логина и пароля в HTTP-заголовке запроса Authorization, поэтому такой вариант допустим с любыми HTTP-методами, включая GET.
@@shurik_codes вопрос был про формочку, спасибо за ответ ☺️
Привет. Тут нависает проблема, мне идея пишет, что 'httpBasic()' и некоторые другие методы устарели и скоро будут удалены.
Использую последнюю версию Security.
Есть ли аналоги метода и можно ли как-нибудь исправить это? Или лучше перейти на более старую версию фреймворка?
Да, в Spring Security с версии 6.1 некоторые DSL-цепочки отмечены как @Deprecated и будут удалены в следующей мажорной версии фреймворка - 7.0. Вместо них предполагается использовать DSL с лямбда-выражениями. В случае с той же Basic-аутентификацией код станет примерно таким: http.httpBasic(httpBasic -> httpBasic.realmName("...")...). В общем, всё, что было между началом цепочки методов DSL (httpBasic() в данном случае) и концом (and()) теперь переезжает внутрь лямбда-выражения. Вот тут подробнее: docs.spring.io/spring-security/reference/migration-7/configuration.html
@@shurik_codes Спасибо 🙏
Привет.
Подскажи пожалуйста, а ты не занимаешься менторвством?
Вообще да, занимаюсь, но сейчас на это времени не хватает
По поводу сессий и токенов, токены же гораздо уязвимее сессий, и у сессий гораздо больше возможностей, почему используют токены?
Уязвимость токенов можно снизить, используя защищённые соединения и сохраняя их на стороне клиента в безопасном месте, например в куках с параметрами Secure, HttpOnly и SameSite=Strict, если речь идёт о браузере. Собственно, сессионные куки желательно тоже с такими параметрами сохранять.
Популярность токенов как таковых связана с развитием сервисов и протоколов единого входа (Single Sign-On, SSO), таких как OAuth, OpenID, OIDC, CAS. В процессе аутентификации к сервису аутентификации обращается как пользователь из клиентского приложения, так и целевой сервис, к которому пользователь пытается получить доступ. Использовать стандартную HTTP-сессию в данном случае не получится, хотя состояние между запросами нужно передавать, и для этого хорошо подходят токены.
Токен позволяет не акцентировать внимание на способах хранения сессии в распределённых решениях. Хотя это можно решить хранением сессионных данных в базах данных, как это сделано в Spring Security.
Кто такой Стас Астафьев?
Автоблоггер
Где ты был раньше?....
Дома
Здравствуйте. Как победить ошибку, которая выпадает на 30:40 в видео? status=999. Пользователь вроде авторизуется, при повторном входе не страницу это видно, но первый раз при авторизации выпадает эта ошибка.
Если память меня не подводит, то это происходит потому что до этого я использовал в сессии браузера BASIC-аутентификацию, в результате чего данные BASIC-аутентификации сохранились в браузере, и при попытке входа при помощи формы одновременно используются два способа: BASIC и форма. Чтобы такого не происходило, способы аутентификации нужно разводить по разным цепочкам фильтров безопасности.
опять устаревший материал.
безопасность меняется быстрее всего.
а в чём он именно устаревший?
@@shurik_codes что то навело на такие мысли. хотя сейчас смотрю - используется Chain.. пока отложил изучение, на днях проанализирую. Извиняюсь, если был не прав.
status 999 лечится
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
Но лучше всё же решать ошибку, а не отключать ErrorMvcAutoConfiguration)