Привет! В таблице 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 стандарт.
здравствуйте. это зависит от конфигурации. пулл соединений нужно предоставить. а для видео материала - данный аспект выходит из зоны обсуждения. так как, как настраивается пулл, чаще относится не к коду, а к эксплуатации системы, и данные параметры подбираются для каждой системы по отдельности
ЗЫ Ошибка с лейзи инициализацией - поставте @Transactional над методом loadUserByUsername... Хорошо что все за тобой получилось, уже лайк... хороша ли практика в контроллере юзать репозитории, или лучше операции с ними выкинуть в сервисы...
Очень странно, что за столько время никто не обратил внимание на ошибку (маленькую): как мы можем отправлять 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 тоже ничего не генерит.пора освежить видео.
записать видео, и объяснить - это еще один из способов, лучше понять тему и разобраться в нем. так как без практики, многие вещи забываются. спасибо за обратную связь
Приветствую! Ну говно и говно! А исправлять ошибки для обучения - очень полезно, чем просто бездумно копи-пастить. И об CORS... Он настраивается отдельно для каждого приложения. Он будет разным, в зависимости от того, будет ли на localhost запущен, или на production сервере.
Видео зачётное, но у меня не работал javax, импортировалось всё успешно. Но выдавало ошибки в создании бина при запуске. Перешёл на jakarta.persistence.* он новый и отлично работает со Sprng`ом
для того чтобы снять материал, с начало пишу контент план. за тем реализовываю проект отдельно. после уже идет съемка. если писать код сразу, включив камеру, теряю ход мыслей, могу переписывать код по 100500 раз, и придется записывать много дублей и потратить много времени на монтаж. у меня есть работа, и личные проекты, и еще семья. на канале не зарабатываю. это больше хобби. потому, копи-паст, и попутно объяснять, что и для чего делаю - для меня самый приемлемый формат на текущий момент. критику услышал. хотел бы от вас услышать, а как бы было лучше? какие есть предложения по улучшению? как вам было бы лучше понять материал?
@@bseitkazin тут стоит подумать, если вы снимаете ролики лично для себя, т.к. я увидел "для меня это самый приемлимый формат", то сильно можете не обращать внимание на мой коммент. Если все таки снимаете для того чтоб людям помочь, то лучше в реалтайме писать код. У вас в ролике очень много побочной информации было. Т.е. если вы хотели снять полный мануал. То разумнее было бы подготовить энтити и начать снимать и писать код на основе этих энтити. Но тему которая важна писать все таки в ручную. По факту получилось так что над энтити мы час сидим, а потом за пол часа копипастим jwt и все на этом) У вас интересные темы роликов. Но длительность видео и копипаст реально неприятны. Кстати, в обучающих роликах хорошо если будете делать ошибки, люди которые смотрят могут столкнуться с проблемами которых вы избежали, просто копированием рабочего кода. В общем посыл какой. Короче ролики и писать самому. И будет перфекто) Жду новых роликов, как думаю и многие :)
у меня ошибка в файле WebSecurityConfig метод configure http.addFilterBefore( authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); В этой строке. Другой тип аргументов. Кто-то сталкивался?
Можешь подсказать. Как получилось так что AuthenticationProcessingFilter ты не настраивал(по умолчанию там путь /login), а в /signin контроллере пользователь авторизируется? У меня так не проходит. Может это благодаря http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);?
Благодарю за видео, как раз jwt мучаю
Ааа! Какой ещё"сервайс"! Отличная лекция, просто идеальная, и тут плетью по ушам: service as "сервайс"...
Спасибо за ролик.Успехов .
Спасибо большое за видео! Выкладывайте еще, хорошо получается!
чувак от души респект все работает! Очень помог!
Спасибо за урок! Очень пригодился.
Пока слушал, залип на прическу, как будто отдельно от лица шевелится))
Очень годный контент! Спасибо.
Добрый день, очень понравилось ваше видео!
Хотела бы попросить вас снять видео о тестировании данного api)
Привет! В таблице user_roles - role_id всегда равна 1. Создаются только ROLE_USER. Использую твой проект с Git.
В сущности User используется Set roles, а в API запросах указано role, соответственно в API необходимо поправить на "roleS" : ["admin"]
А так всё чётко и по делу)
да) спасибо) получается хорошее домашнее задание, разобраться самому, чтобы заработало до конца) вышло случайно, но по мне, вышло неплохо)
давно не видел эклипс)
и в светлой теме)
Азамат, очень радостно видеть что вы решили сменить шоу-бизнес на ИТ! Всё в вашем видео прекрастно, кроме использования spring boot. Куда приятнее видеть в проекте только необходимые зависимости вместо постоянно конфликтующих между собой boot контейнеров. Спасибо за видео!
Спасибо. Делаю pet проект на android. Попробую прикрутить Ваш вариант авторизации и аутентификации.
Оо наконец то!
Спасибо за урок, но почему-то слишком тихий звук от рассказчика 🤷♂️
Класс! Особенно понравилось: тестирование - все по-полочкам; контроллер авторизации; подход с Enum в классе ролей. Единственный вопрос (ко всем): на сколько правильно использовать AuthController с такой "расширенной" логикой в prodaction?
отвечая на вопрос - не очень хорошо. лучше конечно вынести в отдельный сервис. а если делать совсем хорошо, применяя "слоённую архитектуру", то авторизацию лучше вынести в отдельную библиотеку, которая не зависит от библиотек/фреймворка и тд. и чтобы она была подключаемая для других приложений.
Не знаю как исправили ошибку в самом конце, но я пофиксил поменяв в User модели FetchType на Eager вместо Lazy.
Спасибо огромное! Если бы не ваш ответ - на вечер бы залип точно!
Дааа! Большое спасибо!!!
Еще можно расширить область действия hibernate сессии поставив @Transactional на соответствующий метод UserDetailsServiceImpl
Здравствуйте! Очень познавательное видео! А разве при старте спринг секьюрити не должно отдавать логин и пароль разработчика? А то я думаю если не показывает в консоли что я не так делаю?
Лайк!
Здорово, но как теперь заставить клиент отправлять этот токен серверу? С помощью ajax?
Я же хочу приложением пользоваться не через постман)
в header положи его там сервер из него же читает
для этого снял новое видео - ruclips.net/video/GXTorUvK76g/видео.html, тут на Angular реализовал получение токена, и как проставлять токен для каждого секьюрного запроса
молодчик. у нас на работе используют Keycloak только для того что бы он сгенерил токен, и мы этот токен засунули в редис. Какие преимущества использования сервера аутентификации перед данным подходом?
Нету лучшего подхода. Зависит от задач и проблем. Например, был Keycloak, но у нас помимо пользователей, были еще и сотрудники с разными должностями и уровнями доступа. Кто-то может создавать контент, а кто-то может апрувить контент и публиковать. И данные записи записываются в отдельной системе, и управляются другими людьми. Одна лишь процедура увольнения чего стоит. И нужно было интегрироваться с LDAP системой. Затем необходимо было реализовать двух-факторную авторизацию (2FA, по смс). После пришел бизнес, и попросил добавить мульти-аккаунт...
Использование Keycloak позволило адаптироваться под хотелки бизнеса.
Контроллеры получились очень толстыми , в целом полезный урок, спасибо. Как доп задание на понимание, можно рефакторить.
GJ
понятно
можно ли как-то получить теперь все данные из таблицы если роль администратор ? И если возможно могли бы подсказать как?
Добрый день !!! Скачать где нибудь можно ?
У меня вот вопрос, могу ли я используя лишь JWT выдать токен с определённой ролью анонимному юзеру (которого нет в бд) ? Если да, то не наведёшь меня где я могу про это копнуть?
я бы начал с того, что узнал бы, а какая цель данной операции? для чего нужен токен анонимному пользователю? чем отличается анонимный пользователь А от анонимного пользователя Б? что случится, если два этих анонимного пользователя перепутают токены?
обычно, мы закрываем REST API при помощи авторизации токенами. и можем прописывать правила, что ресурс (API) публичный, то есть его может вызывать анонимный пользователь. думаю данный подход, перекрывает большинство возможных требовании от бизнеса.
Спасибо за урок! У меня все же остался вопрос, вы таблицы от руки создавали?
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 стандарт.
вместо пароля к БД нужно хранить название пула соединений в датасорс.вобще никто не работает с БД.
здравствуйте. это зависит от конфигурации. пулл соединений нужно предоставить. а для видео материала - данный аспект выходит из зоны обсуждения. так как, как настраивается пулл, чаще относится не к коду, а к эксплуатации системы, и данные параметры подбираются для каждой системы по отдельности
Инжектить лучше по типу интерфейса, а не по типу имплементации - UserDetailsService userDetailsService
ЗЫ Ошибка с лейзи инициализацией - поставте @Transactional над методом loadUserByUsername...
Хорошо что все за тобой получилось, уже лайк... хороша ли практика в контроллере юзать репозитории, или лучше операции с ними выкинуть в сервисы...
Очень странно, что за столько время никто не обратил внимание на ошибку (маленькую): как мы можем отправлять 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 тоже ничего не генерит.пора освежить видео.
ощущение,что вы сами не понимаете до конца,что происходит
записать видео, и объяснить - это еще один из способов, лучше понять тему и разобраться в нем. так как без практики, многие вещи забываются. спасибо за обратную связь
Урок полное г@вн0, сидел исправлял несколько дней баг с CORS. Желаю удачи тем, кто пытается делать по этому видосу)))
Жиза братик, тоже несколько дней Eб@лся
Приветствую! Ну говно и говно! А исправлять ошибки для обучения - очень полезно, чем просто бездумно копи-пастить. И об CORS... Он настраивается отдельно для каждого приложения. Он будет разным, в зависимости от того, будет ли на localhost запущен, или на production сервере.
@@bseitkazin Тут вы, конечно, правы. Но все же хотелось бы более корректные материалы...
Видео зачётное, но у меня не работал javax, импортировалось всё успешно. Но выдавало ошибки в создании бина при запуске. Перешёл на jakarta.persistence.* он новый и отлично работает со Sprng`ом
Тебе следует поработать над объяснением материала
Приветствую. Спасибо за обратную связь. Обязательно поработаю над всем.
80% видео просто копипаст, который не дает никакого понимания происходящего.
для того чтобы снять материал, с начало пишу контент план. за тем реализовываю проект отдельно. после уже идет съемка. если писать код сразу, включив камеру, теряю ход мыслей, могу переписывать код по 100500 раз, и придется записывать много дублей и потратить много времени на монтаж.
у меня есть работа, и личные проекты, и еще семья. на канале не зарабатываю. это больше хобби. потому, копи-паст, и попутно объяснять, что и для чего делаю - для меня самый приемлемый формат на текущий момент.
критику услышал. хотел бы от вас услышать, а как бы было лучше? какие есть предложения по улучшению? как вам было бы лучше понять материал?
@@bseitkazin тут стоит подумать, если вы снимаете ролики лично для себя, т.к. я увидел "для меня это самый приемлимый формат", то сильно можете не обращать внимание на мой коммент.
Если все таки снимаете для того чтоб людям помочь, то лучше в реалтайме писать код.
У вас в ролике очень много побочной информации было.
Т.е. если вы хотели снять полный мануал. То разумнее было бы подготовить энтити и начать снимать и писать код на основе этих энтити. Но тему которая важна писать все таки в ручную.
По факту получилось так что над энтити мы час сидим, а потом за пол часа копипастим jwt и все на этом)
У вас интересные темы роликов. Но длительность видео и копипаст реально неприятны.
Кстати, в обучающих роликах хорошо если будете делать ошибки, люди которые смотрят могут столкнуться с проблемами которых вы избежали, просто копированием рабочего кода.
В общем посыл какой. Короче ролики и писать самому. И будет перфекто)
Жду новых роликов, как думаю и многие :)
у меня ошибка в файле WebSecurityConfig метод configure
http.addFilterBefore( authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
В этой строке. Другой тип аргументов.
Кто-то сталкивался?
Можешь подсказать. Как получилось так что AuthenticationProcessingFilter ты не настраивал(по умолчанию там путь /login), а в /signin контроллере пользователь авторизируется? У меня так не проходит. Может это благодаря http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);?
Почему если у меня вместо .properties фала есть .yml то не могу достучатся до занчений jwt.secret ?
скорее всего ошибка внутри. при yml файле, иерархия ключа другая