Привет! В таблице user_roles - role_id всегда равна 1. Создаются только ROLE_USER. Использую твой проект с Git. В сущности User используется Set roles, а в API запросах указано role, соответственно в API необходимо поправить на "roleS" : ["admin"] А так всё чётко и по делу)
Азамат, очень радостно видеть что вы решили сменить шоу-бизнес на ИТ! Всё в вашем видео прекрастно, кроме использования spring boot. Куда приятнее видеть в проекте только необходимые зависимости вместо постоянно конфликтующих между собой boot контейнеров. Спасибо за видео!
Класс! Особенно понравилось: тестирование - все по-полочкам; контроллер авторизации; подход с Enum в классе ролей. Единственный вопрос (ко всем): на сколько правильно использовать AuthController с такой "расширенной" логикой в prodaction?
отвечая на вопрос - не очень хорошо. лучше конечно вынести в отдельный сервис. а если делать совсем хорошо, применяя "слоённую архитектуру", то авторизацию лучше вынести в отдельную библиотеку, которая не зависит от библиотек/фреймворка и тд. и чтобы она была подключаемая для других приложений.
Здравствуйте! Очень познавательное видео! А разве при старте спринг секьюрити не должно отдавать логин и пароль разработчика? А то я думаю если не показывает в консоли что я не так делаю?
для этого снял новое видео - ruclips.net/video/GXTorUvK76g/видео.html, тут на Angular реализовал получение токена, и как проставлять токен для каждого секьюрного запроса
молодчик. у нас на работе используют Keycloak только для того что бы он сгенерил токен, и мы этот токен засунули в редис. Какие преимущества использования сервера аутентификации перед данным подходом?
Нету лучшего подхода. Зависит от задач и проблем. Например, был Keycloak, но у нас помимо пользователей, были еще и сотрудники с разными должностями и уровнями доступа. Кто-то может создавать контент, а кто-то может апрувить контент и публиковать. И данные записи записываются в отдельной системе, и управляются другими людьми. Одна лишь процедура увольнения чего стоит. И нужно было интегрироваться с LDAP системой. Затем необходимо было реализовать двух-факторную авторизацию (2FA, по смс). После пришел бизнес, и попросил добавить мульти-аккаунт... Использование Keycloak позволило адаптироваться под хотелки бизнеса.
У меня вот вопрос, могу ли я используя лишь JWT выдать токен с определённой ролью анонимному юзеру (которого нет в бд) ? Если да, то не наведёшь меня где я могу про это копнуть?
я бы начал с того, что узнал бы, а какая цель данной операции? для чего нужен токен анонимному пользователю? чем отличается анонимный пользователь А от анонимного пользователя Б? что случится, если два этих анонимного пользователя перепутают токены? обычно, мы закрываем REST API при помощи авторизации токенами. и можем прописывать правила, что ресурс (API) публичный, то есть его может вызывать анонимный пользователь. думаю данный подход, перекрывает большинство возможных требовании от бизнеса.
@@ИгорьМешалкин-ж7ф да, это можно настроить в application.properties с помощью параметра spring.jpa.hibernate.ddl-auto=create, там есть и другие возможные значения spring.jpa.hibernate.ddl-auto, можно например только дописывать несуществующие столбцы. Короче почитай про этот параметр
добрый день, Вам не приходилось интегрировать aouth2, jwt в спринг бут проект ? даже к существующему проекту было бы интересно прикрутить сервер авторизации (этим и занимаюсь). на русскоязычных просторах с этим скудновато, а эта штука сейчас в моде. спасибо Вам за видео.
спасибо на добром слове. по вашему вопросу - вы хотите в Spring Boot'е реализовать Authorization Server? или хотите подключить к другому авторизационному серверу? если пункт 1 - то да, с этим сложно, и обычно в документации/обучалке показывают как подключиться к github/google. если пункт 2 - то команда Spring Security там переписывают все. WebSecurityConfigurerAdapter - уже устарел. Ждем команду, когда выпустят стабильный релиз - 1.0.0. есть другой способ - взять что-то готовое - Keykloak, UAA от Cloundfaundry, WSO2 Identity Server - то, что могу вспомнить сходу. И рекомендовал бы выбрать их, чем пытаться реализовать openID стандарт.
здравствуйте. это зависит от конфигурации. пулл соединений нужно предоставить. а для видео материала - данный аспект выходит из зоны обсуждения. так как, как настраивается пулл, чаще относится не к коду, а к эксплуатации системы, и данные параметры подбираются для каждой системы по отдельности
Очень странно, что за столько время никто не обратил внимание на ошибку (маленькую): как мы можем отправлять JSON c полем "role": ["admin"](указано в REDME и в видеоуроке), если в классе AuthController в методе registerUser мы заполняем коллекцию так: Set reqRoles = signupRequest.getRoles(). Таким образом, в JSON-объекте мы каждый раз (фактически) передаем null, вместо реальной роли. Должно быть либо - "roles": ["admin"], либо - Set reqRoles = signupRequest.getRole()
Это устарело Jwts.parser().это тоже .signWith(SignatureAlgorithm.HS512, jwtSecret).jjwt 0.11 сейчас последняя версия.BCrypr тоже ничего не генерит.пора освежить видео.
у меня ошибка в файле WebSecurityConfig метод configure http.addFilterBefore( authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); В этой строке. Другой тип аргументов. Кто-то сталкивался?
записать видео, и объяснить - это еще один из способов, лучше понять тему и разобраться в нем. так как без практики, многие вещи забываются. спасибо за обратную связь
ЗЫ Ошибка с лейзи инициализацией - поставте @Transactional над методом loadUserByUsername... Хорошо что все за тобой получилось, уже лайк... хороша ли практика в контроллере юзать репозитории, или лучше операции с ними выкинуть в сервисы...
для того чтобы снять материал, с начало пишу контент план. за тем реализовываю проект отдельно. после уже идет съемка. если писать код сразу, включив камеру, теряю ход мыслей, могу переписывать код по 100500 раз, и придется записывать много дублей и потратить много времени на монтаж. у меня есть работа, и личные проекты, и еще семья. на канале не зарабатываю. это больше хобби. потому, копи-паст, и попутно объяснять, что и для чего делаю - для меня самый приемлемый формат на текущий момент. критику услышал. хотел бы от вас услышать, а как бы было лучше? какие есть предложения по улучшению? как вам было бы лучше понять материал?
@@bseitkazin тут стоит подумать, если вы снимаете ролики лично для себя, т.к. я увидел "для меня это самый приемлимый формат", то сильно можете не обращать внимание на мой коммент. Если все таки снимаете для того чтоб людям помочь, то лучше в реалтайме писать код. У вас в ролике очень много побочной информации было. Т.е. если вы хотели снять полный мануал. То разумнее было бы подготовить энтити и начать снимать и писать код на основе этих энтити. Но тему которая важна писать все таки в ручную. По факту получилось так что над энтити мы час сидим, а потом за пол часа копипастим jwt и все на этом) У вас интересные темы роликов. Но длительность видео и копипаст реально неприятны. Кстати, в обучающих роликах хорошо если будете делать ошибки, люди которые смотрят могут столкнуться с проблемами которых вы избежали, просто копированием рабочего кода. В общем посыл какой. Короче ролики и писать самому. И будет перфекто) Жду новых роликов, как думаю и многие :)
Приветствую! Ну говно и говно! А исправлять ошибки для обучения - очень полезно, чем просто бездумно копи-пастить. И об CORS... Он настраивается отдельно для каждого приложения. Он будет разным, в зависимости от того, будет ли на localhost запущен, или на production сервере.
Можешь подсказать. Как получилось так что AuthenticationProcessingFilter ты не настраивал(по умолчанию там путь /login), а в /signin контроллере пользователь авторизируется? У меня так не проходит. Может это благодаря http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);?
Видео зачётное, но у меня не работал javax, импортировалось всё успешно. Но выдавало ошибки в создании бина при запуске. Перешёл на jakarta.persistence.* он новый и отлично работает со Sprng`ом
Благодарю за видео, как раз jwt мучаю
Спасибо большое за видео! Выкладывайте еще, хорошо получается!
Добрый день, очень понравилось ваше видео!
Хотела бы попросить вас снять видео о тестировании данного api)
Спасибо за ролик.Успехов .
Пока слушал, залип на прическу, как будто отдельно от лица шевелится))
Очень годный контент! Спасибо.
Спасибо за урок! Очень пригодился.
Привет! В таблице user_roles - role_id всегда равна 1. Создаются только ROLE_USER. Использую твой проект с Git.
В сущности User используется Set roles, а в API запросах указано role, соответственно в API необходимо поправить на "roleS" : ["admin"]
А так всё чётко и по делу)
да) спасибо) получается хорошее домашнее задание, разобраться самому, чтобы заработало до конца) вышло случайно, но по мне, вышло неплохо)
Спасибо. Делаю pet проект на android. Попробую прикрутить Ваш вариант авторизации и аутентификации.
чувак от души респект все работает! Очень помог!
давно не видел эклипс)
и в светлой теме)
Оо наконец то!
Азамат, очень радостно видеть что вы решили сменить шоу-бизнес на ИТ! Всё в вашем видео прекрастно, кроме использования spring boot. Куда приятнее видеть в проекте только необходимые зависимости вместо постоянно конфликтующих между собой boot контейнеров. Спасибо за видео!
Класс! Особенно понравилось: тестирование - все по-полочкам; контроллер авторизации; подход с Enum в классе ролей. Единственный вопрос (ко всем): на сколько правильно использовать AuthController с такой "расширенной" логикой в prodaction?
отвечая на вопрос - не очень хорошо. лучше конечно вынести в отдельный сервис. а если делать совсем хорошо, применяя "слоённую архитектуру", то авторизацию лучше вынести в отдельную библиотеку, которая не зависит от библиотек/фреймворка и тд. и чтобы она была подключаемая для других приложений.
Здравствуйте! Очень познавательное видео! А разве при старте спринг секьюрити не должно отдавать логин и пароль разработчика? А то я думаю если не показывает в консоли что я не так делаю?
Здорово, но как теперь заставить клиент отправлять этот токен серверу? С помощью ajax?
Я же хочу приложением пользоваться не через постман)
в header положи его там сервер из него же читает
для этого снял новое видео - ruclips.net/video/GXTorUvK76g/видео.html, тут на Angular реализовал получение токена, и как проставлять токен для каждого секьюрного запроса
молодчик. у нас на работе используют Keycloak только для того что бы он сгенерил токен, и мы этот токен засунули в редис. Какие преимущества использования сервера аутентификации перед данным подходом?
Нету лучшего подхода. Зависит от задач и проблем. Например, был Keycloak, но у нас помимо пользователей, были еще и сотрудники с разными должностями и уровнями доступа. Кто-то может создавать контент, а кто-то может апрувить контент и публиковать. И данные записи записываются в отдельной системе, и управляются другими людьми. Одна лишь процедура увольнения чего стоит. И нужно было интегрироваться с LDAP системой. Затем необходимо было реализовать двух-факторную авторизацию (2FA, по смс). После пришел бизнес, и попросил добавить мульти-аккаунт...
Использование Keycloak позволило адаптироваться под хотелки бизнеса.
Добрый день !!! Скачать где нибудь можно ?
можно ли как-то получить теперь все данные из таблицы если роль администратор ? И если возможно могли бы подсказать как?
Контроллеры получились очень толстыми , в целом полезный урок, спасибо. Как доп задание на понимание, можно рефакторить.
У меня вот вопрос, могу ли я используя лишь JWT выдать токен с определённой ролью анонимному юзеру (которого нет в бд) ? Если да, то не наведёшь меня где я могу про это копнуть?
я бы начал с того, что узнал бы, а какая цель данной операции? для чего нужен токен анонимному пользователю? чем отличается анонимный пользователь А от анонимного пользователя Б? что случится, если два этих анонимного пользователя перепутают токены?
обычно, мы закрываем REST API при помощи авторизации токенами. и можем прописывать правила, что ресурс (API) публичный, то есть его может вызывать анонимный пользователь. думаю данный подход, перекрывает большинство возможных требовании от бизнеса.
Не знаю как исправили ошибку в самом конце, но я пофиксил поменяв в User модели FetchType на Eager вместо Lazy.
Спасибо огромное! Если бы не ваш ответ - на вечер бы залип точно!
Дааа! Большое спасибо!!!
Еще можно расширить область действия hibernate сессии поставив @Transactional на соответствующий метод UserDetailsServiceImpl
Спасибо за урок! У меня все же остался вопрос, вы таблицы от руки создавали?
Hibernate создаёт за тебя схему.
@@bseitkazin это с любыми СУБД работает?
@@ИгорьМешалкин-ж7ф да, это можно настроить в application.properties с помощью параметра spring.jpa.hibernate.ddl-auto=create, там есть и другие возможные значения spring.jpa.hibernate.ddl-auto, можно например только дописывать несуществующие столбцы. Короче почитай про этот параметр
добрый день, Вам не приходилось интегрировать aouth2, jwt в спринг бут проект ? даже к существующему проекту было бы интересно прикрутить сервер авторизации (этим и занимаюсь).
на русскоязычных просторах с этим скудновато, а эта штука сейчас в моде.
спасибо Вам за видео.
спасибо на добром слове.
по вашему вопросу - вы хотите в Spring Boot'е реализовать Authorization Server? или хотите подключить к другому авторизационному серверу?
если пункт 1 - то да, с этим сложно, и обычно в документации/обучалке показывают как подключиться к github/google.
если пункт 2 - то команда Spring Security там переписывают все. WebSecurityConfigurerAdapter - уже устарел. Ждем команду, когда выпустят стабильный релиз - 1.0.0.
есть другой способ - взять что-то готовое - Keykloak, UAA от Cloundfaundry, WSO2 Identity Server - то, что могу вспомнить сходу. И рекомендовал бы выбрать их, чем пытаться реализовать openID стандарт.
Ааа! Какой ещё"сервайс"! Отличная лекция, просто идеальная, и тут плетью по ушам: service as "сервайс"...
вместо пароля к БД нужно хранить название пула соединений в датасорс.вобще никто не работает с БД.
здравствуйте. это зависит от конфигурации. пулл соединений нужно предоставить. а для видео материала - данный аспект выходит из зоны обсуждения. так как, как настраивается пулл, чаще относится не к коду, а к эксплуатации системы, и данные параметры подбираются для каждой системы по отдельности
Лайк!
В конце как ошибку исправили?
тоже интересно, пни, если получишь ответ, у меня пост не работает, такая же ошибка
Спасибо за урок, но почему-то слишком тихий звук от рассказчика 🤷♂️
GJ
понятно
Инжектить лучше по типу интерфейса, а не по типу имплементации - UserDetailsService userDetailsService
Очень странно, что за столько время никто не обратил внимание на ошибку (маленькую): как мы можем отправлять JSON c полем "role": ["admin"](указано в REDME и в видеоуроке), если в классе AuthController в методе registerUser мы заполняем коллекцию так: Set reqRoles = signupRequest.getRoles(). Таким образом, в JSON-объекте мы каждый раз (фактически) передаем null, вместо реальной роли. Должно быть либо - "roles": ["admin"], либо - Set reqRoles = signupRequest.getRole()
можно сказать - что это образовательный метод. думаю над тренажером, где как раз надо исправлять ошибки, и тем самым учиться
Это устарело Jwts.parser().это тоже .signWith(SignatureAlgorithm.HS512, jwtSecret).jjwt 0.11 сейчас последняя версия.BCrypr тоже ничего не генерит.пора освежить видео.
у меня ошибка в файле WebSecurityConfig метод configure
http.addFilterBefore( authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
В этой строке. Другой тип аргументов.
Кто-то сталкивался?
ощущение,что вы сами не понимаете до конца,что происходит
записать видео, и объяснить - это еще один из способов, лучше понять тему и разобраться в нем. так как без практики, многие вещи забываются. спасибо за обратную связь
ЗЫ Ошибка с лейзи инициализацией - поставте @Transactional над методом loadUserByUsername...
Хорошо что все за тобой получилось, уже лайк... хороша ли практика в контроллере юзать репозитории, или лучше операции с ними выкинуть в сервисы...
80% видео просто копипаст, который не дает никакого понимания происходящего.
для того чтобы снять материал, с начало пишу контент план. за тем реализовываю проект отдельно. после уже идет съемка. если писать код сразу, включив камеру, теряю ход мыслей, могу переписывать код по 100500 раз, и придется записывать много дублей и потратить много времени на монтаж.
у меня есть работа, и личные проекты, и еще семья. на канале не зарабатываю. это больше хобби. потому, копи-паст, и попутно объяснять, что и для чего делаю - для меня самый приемлемый формат на текущий момент.
критику услышал. хотел бы от вас услышать, а как бы было лучше? какие есть предложения по улучшению? как вам было бы лучше понять материал?
@@bseitkazin тут стоит подумать, если вы снимаете ролики лично для себя, т.к. я увидел "для меня это самый приемлимый формат", то сильно можете не обращать внимание на мой коммент.
Если все таки снимаете для того чтоб людям помочь, то лучше в реалтайме писать код.
У вас в ролике очень много побочной информации было.
Т.е. если вы хотели снять полный мануал. То разумнее было бы подготовить энтити и начать снимать и писать код на основе этих энтити. Но тему которая важна писать все таки в ручную.
По факту получилось так что над энтити мы час сидим, а потом за пол часа копипастим jwt и все на этом)
У вас интересные темы роликов. Но длительность видео и копипаст реально неприятны.
Кстати, в обучающих роликах хорошо если будете делать ошибки, люди которые смотрят могут столкнуться с проблемами которых вы избежали, просто копированием рабочего кода.
В общем посыл какой. Короче ролики и писать самому. И будет перфекто)
Жду новых роликов, как думаю и многие :)
Урок полное г@вн0, сидел исправлял несколько дней баг с CORS. Желаю удачи тем, кто пытается делать по этому видосу)))
Жиза братик, тоже несколько дней Eб@лся
Приветствую! Ну говно и говно! А исправлять ошибки для обучения - очень полезно, чем просто бездумно копи-пастить. И об CORS... Он настраивается отдельно для каждого приложения. Он будет разным, в зависимости от того, будет ли на localhost запущен, или на production сервере.
@@bseitkazin Тут вы, конечно, правы. Но все же хотелось бы более корректные материалы...
Можешь подсказать. Как получилось так что AuthenticationProcessingFilter ты не настраивал(по умолчанию там путь /login), а в /signin контроллере пользователь авторизируется? У меня так не проходит. Может это благодаря http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);?
Тебе следует поработать над объяснением материала
Приветствую. Спасибо за обратную связь. Обязательно поработаю над всем.
Почему если у меня вместо .properties фала есть .yml то не могу достучатся до занчений jwt.secret ?
скорее всего ошибка внутри. при yml файле, иерархия ключа другая
Видео зачётное, но у меня не работал javax, импортировалось всё успешно. Но выдавало ошибки в создании бина при запуске. Перешёл на jakarta.persistence.* он новый и отлично работает со Sprng`ом