Подключаем Spring Security и oAuth2. Spring Boot REST

Поделиться
HTML-код
  • Опубликовано: 20 июл 2018
  • Spring Boot Rest Application: подключаем Spring Security oAuth2 используя в качестве провайдера oAuth2 Google.
    Для реализации авторизации в приложении можно привычную форму авторизации, но это потребует от пользователя создания новой учётной записи, подтверждение почты, время на заполнение профиля и прочие сложности. От разработчика требуются действия по проверке данных пользователя и организации их шифрования. Альтернатива - использование oAuth2 авторизации с использованием внешнего сервера для подтверждения личности пользователя.
    Ссылка на код из видео:
    github.com/drucoder/sarafan/t...
    Проект Lombok, предоставляющий аннотации для сущностей можно посмотреть тут:
    • Java Tools: Project Lo...
    Spring Framework содержит в своём наборе отличный модуль - Spring Security, включающий, помимо прочего, блок, обеспечивающий простую интеграцию oAuth2 авторизации.
    В качестве провайдера oAuth2 мы будем использовать Google ввиду того, что продукты этой компании достаточно широко распространены и учётная запись Google есть у большинства современных пользователей (по состоянию на 2018 год XD)
    В качестве ориентира при настройке авторизации мы будем использовать официальный гайд из блога проекта Spring:
    spring.io/guides/tutorials/sp...
    Зависимости на необходимые в этом видео модули лежат тут:
    gist.github.com/drucoder/40ff...
    Проперти, необходимые для Spring Security:
    gist.github.com/drucoder/92a1...
    Личный кабинет в Google Developer Console, где создаются токены:
    console.cloud.google.com/apis...
    Ссылка на плейлист Sweater App (Spring MVC):
    • Spring Boot: делаем пр...
    Ссылка на видео с подключением Spring Security в Sweater App:
    • Spring Boot Security: ...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Твиттер: / letscodedru
    ➡ Чат в Discord: / discord
    ➡ Группа Вконтакте: letscodedru
    ➡ Канал в Telegram: t.me/letsCode_dru
    ➡ Чат в Telegram: t.me/joinchat/FeiP9xEhqHajfqh...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    Поддержать проект:
    ➡ Patreon / letscodedru
    ➡ Яндекс.Деньги money.yandex.ru/to/4100145167...
    ➡ PayPal paypal.me/letscodedru
    ➡ Qiwi qiwi.me/letscode
    ➡ WebMoney/BitCoin funding.webmoney.ru/d/drucoder
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Ссылка на канал: / @letscodedru
    ➡ Ссылка на Яндекс.Дзен: zen.yandex.ru/media/id/5ac209...
  • НаукаНаука

Комментарии • 184

  • @letsCodeDru
    @letsCodeDru  5 лет назад +43

    Ну чёкаво, как лето-то проходит? =)

    • @koneckonca2183
      @koneckonca2183 5 лет назад +9

      С джавой в обнимку))

    • @IvanIvanov-oi5nx
      @IvanIvanov-oi5nx 5 лет назад +1

      Есть классное предложение на место джава разработчика по стеку оооочень схожему с применеяемым в видеокурсах, но еще надо много чего еще подтянуть. Поэтому лето проходит практически мимо, зато джава заходит на ура благодаря твоим стараниям. Спасибо!

    • @GrishaObrazcovV
      @GrishaObrazcovV 5 лет назад +1

      Уже осень)))

    • @kusyka911
      @kusyka911 5 лет назад

      Обнови гисты плс, compile в градле уже не совсем актуален

    • @kusyka911
      @kusyka911 5 лет назад

      и не помешало бы видеть какие хоткеи ты используешь, в частности окно с переменными из дебагера, так и не нашел как его открыть
      P.S. у меня пол установлен, и всё равно он не пришел, может надо что-то дописать конфигах?

  • @alexsh5308
    @alexsh5308 4 года назад +2

    Спасибо огромное за ваши видео! Одни из лучших и понятных уроков , что я вообще смотрел.

  • @nikitaantonenko3287
    @nikitaantonenko3287 5 лет назад +7

    Привет из лета 2019!)) Лето просто супер)) Спасибо огромное за урок!))

  • @yuriynesterenko9280
    @yuriynesterenko9280 5 лет назад +4

    Классная тема!!! Не думал, что вся эта авторизация так легко делается!!)) Осталось только понять как сама лямбда работает....
    Андрей, как всегда спасибо за видео!!!

  • @panpan6246
    @panpan6246 5 лет назад +5

    Чётко расписал, зачет, автору респект. Лето проходит хорошо, быдлокоджу более продуктивно)

    • @letsCodeDru
      @letsCodeDru  5 лет назад +5

      Не, дружище, быдло кодить не надо, настраивал себя на то, что пишешь хороший код :)
      Мотивация и формулировка важны ;)

  • @vladavekin9384
    @vladavekin9384 5 лет назад +3

    Спасибо за классные уроки. Лето проходит неплохо, правда на море редко выбираюсь и за работы. А сам как

    • @letsCodeDru
      @letsCodeDru  5 лет назад +1

      Тоже работы много, продукт запускаем. Отдыхать зимой буду)

  • @nikitaantonenko3287
    @nikitaantonenko3287 5 лет назад

    Спасибо большое!)) С праздниками всех!) Мы используем протокол oauth2 для общения между микросервисами и для общения клиент-сервер)

  • @jacenAugust
    @jacenAugust 5 лет назад +10

    классные видео, голос, информация и количество ее. Почти как сериал смотрится, почти интересно чем закончится)

  • @Ilya_yarets
    @Ilya_yarets 4 года назад +3

    Привет из лета 2020!) Лето так себе, 2020-ый очень не простой для всего мира:(
    вот сидим твои видосики изучем)

    • @vvbubnov
      @vvbubnov 3 года назад +1

      И джаву учим)

    • @Ilya_yarets
      @Ilya_yarets 3 года назад

      @@vvbubnov 👍👍👍👍

  • @stanislavstudzinskyi2347
    @stanislavstudzinskyi2347 5 лет назад +3

    Невероятно толковые уроки! Большое спасибо !

  • @D.P._
    @D.P._ 5 лет назад

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

  • @Ivan60206
    @Ivan60206 2 года назад

    Спасибо) лето быстро проходит

  • @farkhoddaniyarov4909
    @farkhoddaniyarov4909 5 лет назад +3

    Отличный урок, четко, ясно. Спасибо большое))

  • @JustMoreyl
    @JustMoreyl 5 лет назад +2

    Спасибо Дрю ♥♥♥

  • @Gett37
    @Gett37 Год назад

    10/10, посмотрел на одном дыхании

  • @user-xj8nv1lr1x
    @user-xj8nv1lr1x 9 месяцев назад

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

  • @research_yourself_and_world
    @research_yourself_and_world 5 лет назад +1

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

  • @soul8927
    @soul8927 5 лет назад +9

    Так как юзаю MySQL, при компиляции выпала ошибка:
    org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table usr (id varchar(255)...
    Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 1000 bytes
    То есть драйвер не пропускает запрос на создание таблицы с внешним ключем в 255 символов. Проблема в дефолтном движке (MyISAM), что использует Hibernate при генерации запроса в базу и который сильно ограничен.
    Помогла явная перенастройка на другой движок: spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

  • @GlebKuzntesov
    @GlebKuzntesov 5 лет назад +2

    Коротко, ясно и по делу. Респект автору и лайк.

  • @vladavekin9384
    @vladavekin9384 5 лет назад +2

    Продолжай в том же духе. Будем ждать новых интересных проектов.

  • @Elvolvers
    @Elvolvers 4 года назад +1

    Спасибо за видосы. Хоть сейчас и не лето да и год другой)

  • @alexxis246
    @alexxis246 5 лет назад +1

    Спасибо за урок. А можешь запилить видос по собственной серверной авторизации, используя JWT? Уроки в сети есть, но обычно их ведут индусы и как там все у них работает не совсем понятно.

  • @user-mi3rh3gj5l
    @user-mi3rh3gj5l 5 лет назад

    Отличные видео!! Спасибо!! Не могли бы Вы сделать видео о подключении двухфакторной авторизации, например, через тот же Гугл? Было бы очень полезно

  • @user-to7lw5sb8b
    @user-to7lw5sb8b 4 года назад +1

    В файле application.properties переменные accessTokenUri, userAuthorizationUri, userInfoUri, где для них можно найти значения. Хотел подключить авторизацию от Яндекса, но нашёл только значение для userAuthorizationUri.

  • @VASY1PUPKIN2
    @VASY1PUPKIN2 5 лет назад +3

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

    • @user-qk2zq7lh3x
      @user-qk2zq7lh3x 5 лет назад +1

      А дизлайков-то нету

    • @VASY1PUPKIN2
      @VASY1PUPKIN2 5 лет назад +1

      под этим видео пока нет а в плейлисте под видео есть ... полистайте плейлист посмотрите

    • @alexeystaroverov4804
      @alexeystaroverov4804 5 лет назад +4

      думаю дислайки ставят те, кто не может уследить за мыслью автора, потому что если действительно ты не знаком с материалом урока, вот так вот на такой скорости все осознать трудно. Даже когда все вроде понятно, все же должно уложиться в голове.

  • @victormog
    @victormog 5 лет назад +8

    Я ещё сильно отстаю (только sweater заканчиваю разбирать), но авторизация через Google - вещь крайне современная и полезная!
    Было бы также не плохо про LDAP-авторизацию посмотреть - для корпоративных приложений это на много полезнее...

    • @letsCodeDru
      @letsCodeDru  5 лет назад +3

      🤔

    • @victormog
      @victormog 5 лет назад +6

      letsCode
      Практически на любом предприятии есть MS Active Directory. Пользователей удобнее и логичнее авторизовать с помощью LDAP.

    • @mikhaelkondrashkin
      @mikhaelkondrashkin 5 лет назад +4

      поддерживаю, интересно про ldap посмотреть

    • @vladsoldatenko8561
      @vladsoldatenko8561 4 года назад +2

      На спринг.ио есть понятный(хз) туториал по лдап-авторизации: spring.io/guides/gs/authenticating-ldap/

  • @vladkapsky8292
    @vladkapsky8292 5 лет назад

    при авторизации по /login/google (по гайду на spring.io) PrincipalExtractor не сохраняет пользователя в бд. Возможно связано с EnableOAuth2Client. Кто знает, как пофиксить?

  • @user-pg9xg5ei5t
    @user-pg9xg5ei5t 4 года назад +2

    В итоге все запустилось и это круто!!)

  • @farkhoddaniyarov4909
    @farkhoddaniyarov4909 5 лет назад +1

    Огромное человеческое спасибо. :)

  • @atabektaganov8122
    @atabektaganov8122 5 лет назад

    лайк!

  • @borismatashin5891
    @borismatashin5891 3 года назад

    Top1 in youtube)

  • @DarthJaxxFather
    @DarthJaxxFather 5 лет назад +23

    В моём случае при добавлении аннотации @EnableOAuth2Sso приложение напрочь отказывалась запускаться. Говорила что-то вроде: Бин не может быть зарегистрирован....бла, бла, бла. Нашёл такое решение "spring.main.allow-bean-definition-overriding=true" .
    Либо можно использовать compile('org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.0.RELEASE'), там эта проблема устранена.

    • @ivanyuyukin2900
      @ivanyuyukin2900 5 лет назад

      org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource возникает ошибка если использовать выше вами предложенные решения, не знаете в чем может быть проблема?

    • @DarthJaxxFather
      @DarthJaxxFather 5 лет назад

      ​@@ivanyuyukin2900 Я уже точно не помню какая была ошибка. Но у меня была решена проблема 2-м способом, до этого был *2.0.0.RELEASE...

    • @user-kd9pp7ly9c
      @user-kd9pp7ly9c 5 лет назад +3

      2.1.0 не помогло. Помогло 2.1.1 stackoverflow.com/questions/53798458/bean-scopedtarget-oauth2clientcontext-could-not-be-registered-same-bean-name-h

    • @kusyka911
      @kusyka911 5 лет назад

      @@user-kd9pp7ly9c мне помогло и 2.1.0

    • @foxil4370
      @foxil4370 4 года назад

      @@redevil4144 благодарю, похоже что в новой версии какие-то проблемы с
      @EnableOAuth2Sso

  • @user-arbuzer1133
    @user-arbuzer1133 3 года назад +1

    Крутая магия! Рассказано отлично! Не понял ничего...

  • @BatushevVitaly
    @BatushevVitaly 3 года назад

    Пока май, но, надеемся, что лето не как в прошлом году. В security.oauth2.client куча чего стало depricated. В мире все противопоставления black-white, высунув язык от усердия, меняют на allow-depricate или подобное. Да и вообще куча всего, что в 2018 году казалось безумием, случается :)

  • @user-mt9kf4mi7x
    @user-mt9kf4mi7x Год назад

    Если сделать такую авторизацию то только под своим гугл аккаунтом можно зайти или он под другими позволит?

  • @webmasterair
    @webmasterair 4 года назад +3

    Андрей, приветствую!
    Отличные у Вас уроки получаются, большое спасибо.
    Но по этому уроку у меня не отрабатывает principalextractor. Просто он игнорируется спрингом. Все аннотации верны, несколько раз все перепроверил. В чем может быть проблема, подскажите, пожалуйста?
    Заранее спасибо.

    • @ELSA_404
      @ELSA_404 4 года назад +1

      в gradle замените
      implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.0.RELEASE'
      на
      implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.9.RELEASE'

  • @dmitrymukhin9458
    @dmitrymukhin9458 5 лет назад +1

    Мужик! Еще раз попиарил тебя в телеге в группе по spring. Так держать! Что дальше в планах, как твой запал?)

    • @letsCodeDru
      @letsCodeDru  5 лет назад +4

      Огромное спасибо!
      Запал на месте, со временем немного проблемы, но я прорабатывать этот вопрос.
      В планах довести rest до ума, накидать ещё про js интерфейсы и запилить плейлист про реактивный вэб

    • @volandio
      @volandio 5 лет назад +2

      про реактивный веб было бы интересненько

    • @ayazka5248
      @ayazka5248 5 лет назад

      Дима, подскажи, пожалуйста, что за группа?

  • @alexsh5308
    @alexsh5308 4 года назад

    А знает кто-нибудь, как отозвать токен из гугла, чтобы про логауте заново заправшивался логин и пароль? буду благодарен за любую инфу

  • @RostikShunlov
    @RostikShunlov 5 лет назад +2

    у меня почему то lombok @Data даже просто для getters&setters не работает

    • @vladsoldatenko8561
      @vladsoldatenko8561 5 лет назад

      Автор в видео с подключением БД упоминал об этом. Рекомендую пересмотреть прошлое видео.

  • @frolakatov7826
    @frolakatov7826 4 года назад

    всё супер круто, но я одного не понимаю: зачем на 11:17 использовать конструктор по умолчанию и сетить все поля, если можно из того же ломбока использовать @AllArgsConstructor? Это просто bad/good practice? Заранее благодарю за ответ!

    • @skrynfor3947
      @skrynfor3947 4 года назад

      Если я ничего не путаю, то вы не правы. @AllArgsConstructor - спрингу не нужен, это для нас конструктор (если нужно). А спринг сначало создает сущность, потом заполняет сеттерами.

    • @frolakatov7826
      @frolakatov7826 4 года назад

      @@skrynfor3947 так я и говорю про "нас". Спрингу нужен только конструктор по умолчанию, но использовать, как мне кажется, намного удобнее конструктор со всеми аргументами.

  • @Mex4nik_
    @Mex4nik_ 3 года назад

    У меня одного ошибка при создании ключа в Гугле?

  • @rudolfsikorsky7900
    @rudolfsikorsky7900 Год назад +1

    Плюсик поставил, но мне кажется что всю эту хренотень с секурити надо давать как-то отдельно. В прошлом проекте была капча, на сегодня API капчи поменялся - старый код не работает. Когда руки дойдут вычитать доки и сделать по-новому не знаю. А хотелось бы чтобы приложение работало, хоть бы и без авторизации.
    Пожелание: давать такие вещи отдельно или самым последним уроком.

  • @dmitrysomsin2117
    @dmitrysomsin2117 4 года назад

    thx

  • @esu_streba
    @esu_streba 5 лет назад +1

    Вопрос откуда появляются метолды у newUser ?

    • @Krainiiserver
      @Krainiiserver 5 лет назад +2

      @Data аннотация lombok. Если не работает в идее, надо подключить плагин lombok

  • @RostikShunlov
    @RostikShunlov 5 лет назад

    Вопрос
    В vuejs мы создали объект для отправки json давая имена через camelCase
    Но в моделях java мы даем имена полям underscoreCase (потому что имена колонок принято через _)
    Автоматом @RequestBody ищет имена underscoreCase , а c vuejs мы шлем camelCase
    Как !правильно! это устаканить??
    Может быть в моделях отдельно давать имена для колонок?

    • @letsCodeDru
      @letsCodeDru  5 лет назад

      Так. Есть 3 соглашения:
      camelCase
      snake_case
      cebab-case (это в лиспе)
      В java и js мы используем первый. Второй - только в БД в нашем случае. И это головняк Hibernate. В чем вопрос?

    • @RostikShunlov
      @RostikShunlov 5 лет назад

      @@letsCodeDru был вопрос,
      Просто увидел в видео что в model поле задается через snake_case
      И в БД соответственно тоже идет snake_case
      И в самой java это поле тоже как не странно snake_case (а в java тоже принято camelCase, значит имя колонки нужно задавать руками)
      И @RequestBody в json ищет имена snake_case (потму что они так заданы в model )
      Но как я понял нужно задавать в model два имени
      Одно для колонки в БД
      @Column(name="created_at")
      и для самого поля в Java
      private Date createdAt;
      Тогда все будет ровно
      Верно?
      может я как то по тупому ставил вопрос
      сори

  • @qweghj2660
    @qweghj2660 4 года назад +3

    Есть ли аналог аннотации @EnableOauth2Sso, просто в более новой версии помечен как Deprecated

    • @caffeinejavacode1475
      @caffeinejavacode1475 4 года назад

      Получилось сделать о другому?

    • @user-ml2et9iw2l
      @user-ml2et9iw2l 4 года назад

      @@caffeinejavacode1475 получилось найти ответ? :D

    • @caffeinejavacode1475
      @caffeinejavacode1475 4 года назад

      @@user-ml2et9iw2l не совсем

    • @user-ml2et9iw2l
      @user-ml2et9iw2l 4 года назад

      @@caffeinejavacode1475 я просто сделал версию 2.1.0 и все заработало

    • @caffeinejavacode1475
      @caffeinejavacode1475 4 года назад

      @@user-ml2et9iw2l я сделал авторизацию, но не считываю даные юзера.
      В след. видео я понял что мне тяжело Vue. т.к не знаю js. забросил этот плейлист. Начал искать уроки по Vue.

  • @user-nn8yi6hh3r
    @user-nn8yi6hh3r 5 лет назад +1

    Не работает в Spring Boot 2.1.2, при запуске выдает ошибку:
    The bean 'scopedTarget.oauth2ClientContext', defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2RestOperationsConfiguration$SessionScopedConfiguration$ClientContextConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/security/oauth2/config/annotation/web/configuration/OAuth2ClientConfiguration$OAuth2ClientContextConfiguration.class] and overriding is disabled.
    Меняю версию на 2.0.5 - все работает. Как исправить?

  • @user-qy7yv1ut4c
    @user-qy7yv1ut4c 5 лет назад

    Другая проблема - почему то не добавляется пользователь в БД..
    There was an unexpected error (type=Unauthorized, status=401).
    Unauthorized

    • @KejamChannel
      @KejamChannel 4 года назад

      У меня тоже, ты не нашел решение?

  • @user-pg9xg5ei5t
    @user-pg9xg5ei5t 4 года назад +3

    И в билд.грэйдл где строчка автконфигур - там поставил версию 2.1.0

  • @renniqs1084
    @renniqs1084 5 лет назад +1

    Как насчет использовать UUID для id-ка?

    • @letsCodeDru
      @letsCodeDru  5 лет назад +3

      Не возражаю и не запрещаю))))

    • @eldar_ziyatdinov
      @eldar_ziyatdinov 5 лет назад +1

      можно использовать но не лучшее решение, лучше добавь еще одно поле для всех entity uuid

  • @user-bo5lm2lr6m
    @user-bo5lm2lr6m 2 года назад

    Уроки Топ! спасибо большое.
    Подскажите как исправить ошибку, уже 2 дня ломаю голову, в PrincipalExtractor когда идет получение полей(id,email,gender,locale,picture, выдает ошибку: cannot find symbol method setid(string) и так во всех полях

    • @agent_tim
      @agent_tim 2 года назад

      В классе User надо создать геттеры и сеттеры на все поля. Lombok не работает, по задумке он должен был автоматизировать этот процесс.

    • @xLipsar
      @xLipsar Год назад

      Если поставить всё, что связано с Ломбоком выше всех остальных зависимостей, то всё работает

  • @user-oj5gu2kb1k
    @user-oj5gu2kb1k 4 года назад

    Привет, вот бы все только в облачных библиотеках от netfix в паре с spring cloud

    • @letsCodeDru
      @letsCodeDru  4 года назад +4

      Привет. Вот бы мне дополнительные 20 часов в сутках))

  • @RostikShunlov
    @RostikShunlov 5 лет назад +2

    Автор сколько Вам лет?
    и сколько Вы в java?

  • @sashapogoretskiy7046
    @sashapogoretskiy7046 4 года назад

    Если кто использует mariDb (я правда не знаю, только у нее такие проблемы с этим или нет). Когда я пытался зарегистрироваться через гугл аккаунт и у меня вылетала ошибка "Сaused by: java.sql.SQLDataException: (conn=534) Incorrect string value: '\xD0\x90\xD0\xBB\xD0\xB5...' for column `resttest`.`usr`.`name` at row 1". Чтобы решить нужно, чтобы имя вашего аккаунта было написано латиницей

    • @v_maker_hash
      @v_maker_hash 3 года назад

      Мог бы ты поточнее написать что нужно исправить?)) бьюсь со своей ошибкой полдня, и Charset/Collation менял, все равно "Caused by: java.sql.SQLSyntaxErrorException: (conn=977) Incorrect string value: '\xD0\x92\xD0\xB0\xD1\x81...' for column 'name' at row 1"
      Буду очень признателен!

  • @kajmankaiman4896
    @kajmankaiman4896 5 лет назад +2

    Вот ты говоришь легко, а я 3 дня сидел и пытался сделать, пока не допер, что случайно начал делать не клиент, а свой oauth сервер с блекджеком и багами.

  • @user-pg9xg5ei5t
    @user-pg9xg5ei5t 4 года назад +2

    У меня ломбок не захотел работать.
    Пришлось создать все геттеры и сеттеры.

    • @letsCodeDru
      @letsCodeDru  4 года назад

      Бывает. У меня недавно тоже отваливался, пришлось идею шатать, чтобы плагин увидела

    • @user-qy7yv1ut4c
      @user-qy7yv1ut4c 3 года назад +1

      @@letsCodeDru а как идею шатать?

  • @D.P._
    @D.P._ 4 года назад

    "...Я вот видосики пишу, вот такое лето..." - грусть в голосе, аж жалко стало((

    • @letsCodeDru
      @letsCodeDru  4 года назад

      Да чёт подустал я на тот момент) когда лето за окном, тоже хочется за окно, а не вот это все))

    • @D.P._
      @D.P._ 4 года назад

      @@letsCodeDru Эхх да, иногда хочется куда-то в горы, подальше от людей)) Но на самом деле, твои труды, даже в вот такие деньки, не давали многим страждущим новенького, опускать руки и даваться во все тяжкие, после которых уже и нет сил браться за ум.... в Очередной раз, спасибо тебе!
      PS: Пару недель назад, впервые на стрим твой попал. Усы зачетные! по голосу на скринкастах, видел тебя, совсем иначе)

    • @letsCodeDru
      @letsCodeDru  4 года назад +2

      Видел иначе - это как обычно. Та же херня в 100% случаев. Единственный, у кого голос прям соответствует внешности - Барух Садогурский

  • @vkazhdan
    @vkazhdan 5 лет назад +2

    Эх, Андрей, а кроме яндекс денег как тебе еще можно переслать благодарность? Из украины нет легального доступа к яндексу. Напиши в личку, плиз

    • @letsCodeDru
      @letsCodeDru  5 лет назад +3

      Спасибо за желание помочь каналу. Это очень приятно :)
      Пока что не собираю денег с подписчиков. Но очень буду признателен за размещение ссылок в социалочках или ещё где-нибудь в интернете. :)

    • @vkazhdan
      @vkazhdan 5 лет назад +2

      А, это уже (reposts)) Ну хорошо, счастья тебе сейчас и 'во веки веков')!

  • @abdulmajitkubatbekov5731
    @abdulmajitkubatbekov5731 2 года назад +1

    PrincipalExtractor не работает?

    • @mizantropoff
      @mizantropoff Месяц назад

      Spring Boot 3 убрал oauth.autoconfiguration, а PrincipalExtractor оттуда. В отличае от остальных миграционных моментов, которые я разрешил довольно просто, тут пока не нахожу удобоваримой информации , ну, для моего уровня знаний по крайней мере. Начало было хорошим, но от видео к видео все свалилось к "Делай как я и будет тебе счастье " . Это не обучение - а , скажем так, ДОРОЖНАЯ карта, а дальше - гуглить по ключевым словам)

  • @MCDK313
    @MCDK313 3 года назад

    Привет из нелёгкого 2020, кто сталкивался с такой проблемой как у меня? Описываю: локально логинизация через фейсбук и гугл пашет без проблем, сама прила и хост зарегистрирован правильно, но на проде при регистрации с реального домена спринг выкидывает такой эксцепшен "org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.", помогите спасите умоляю!?!?!?!?!?

    • @MCDK313
      @MCDK313 3 года назад

      часть ответа нашёл, что бы это работало на энвайрменте надо сделать конфигурацию WebSecurity, примерно вот так web.httpFirewall(defaultHttpFirewall()); но пока полностью проблема не решена

  • @CabbageStorm
    @CabbageStorm 5 лет назад

    У ломбока же билдер есть.

    • @farkhoddaniyarov4909
      @farkhoddaniyarov4909 5 лет назад

      Заморочек с ним по начало много. Но я настроил, и довольно интересное решение, симпатично смотрится.
      А у вас как выглядит
      @Bean
      public PrincipalExtractor principalExtractor
      Сможете скинуть?

  • @kajmankaiman4896
    @kajmankaiman4896 3 года назад +2

    Короче, нашел способ заменить PrincipalExtractor на момент 29.01.2021(Нет, я не сидел над этим 20 дней, но меня мучило эти 20 дней, что я выбрал неподходящий способ с successHandler). Не хочу засорять гитхаб, поэтому просто распишу это тут.
    Сначала о том, почему неподходящий: с PrincipalExtractor мы по сути ставили своего Authentication Principal'а, а с successHandler мы просто сохраняем его один разок при успешном входе.
    К теме:
    Мы используем openid, поэтому нам, как я писал уже раньше, понадобится OidcUserService, но дополнительно нам нужно отредактировать своего пользователя. Вообще это, мне кажется, костыль, и можно сделать свой UserDetails, но так впадлу...
    Короче, наследуем нашего юзера от OidcUser, добавляем там необходимые интерфейсу поля, помечаем их @Transient, потому что в бд они нам не нужны.
    Дальше похожим способом делаем свой класс сервиса (например SarafanOidcUserService), наследуем его от OidcUserService, переопределяем метод loadUser, в нем получаем пользователя из *супер метода*, т.е OidcUser u = super.loadUser(userRequest), берем из него атрибуты через метод getAttributes(), и создаем уже нашего пользователя из атрибутов полученного. Названия полей в атрибутах такие же, как и в примере дрю. Дальше переносим из полученного от супер метода пользователя необходимые нам поля в нашего созданного пользователя, т.е attributes, authorities, claims и подобные, и уже нашего созданного пользователя мы возвращаем из метода loadUser (Не забудьте про сохранение).
    И последний штрих, в конфиг инжектим наш сервис(@Autowired) и добавляем к нашему вызову метода oauth2Login (Теперь мы вызываем его так, т.к в новой Spring Security @EnableOauth2Sso стало deprecated) в скобках следующую лямбда-функцию:
    userInfo -> userInfo.userInfoEndpoint().oidcUserService(SarafanOidcUserService)
    Итог: Теперь при использовании аннотации @AuthenticationPrincipal мы можем получать нашего пользователя, вебсокет(через несколько видео) будет работать с нашим пользователем (при successHandler он выводил поле sub, теперь будет выводить имя пользователя).
    Пришлось подправить классы:
    1) WebSecurityConfig
    2) User
    Пришлось добавить классы:
    1) SarafanOidcUserService

    • @mirnijalexey2765
      @mirnijalexey2765 3 года назад

      одна строчка - implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.9.RELEASE' ,но за старанье все ровно молодец!

    • @kajmankaiman4896
      @kajmankaiman4896 3 года назад

      @@mirnijalexey2765 ааххаха, ну я мог бы и догадаться, что нужно просто зависимость подкрутить. Спасибо :)

    • @mirnijalexey2765
      @mirnijalexey2765 3 года назад

      @@kajmankaiman4896 на работу устроился?)

    • @kajmankaiman4896
      @kajmankaiman4896 3 года назад

      @@mirnijalexey2765 Не, диплом вот делаю, а потом уже на работу)

    • @mirnijalexey2765
      @mirnijalexey2765 3 года назад

      @@kajmankaiman4896 Красавчик, удачи!

  • @user-qy7yv1ut4c
    @user-qy7yv1ut4c 5 лет назад

    @Data не работает - пришлось гетеры давать - кто решил проблему?

    • @user-wj7if5xq6l
      @user-wj7if5xq6l 5 лет назад +2

      В IDEA поставил галочку File-Settings-Build, Execution, Deployment-Compiler-Annotation Processors-Enable Annotation Processing и установил плагин Lombok для идеи.

    • @user-qy7yv1ut4c
      @user-qy7yv1ut4c 5 лет назад

      @@user-wj7if5xq6l спасибо, а плагин тоже через Settings ставиться?

    • @user-wj7if5xq6l
      @user-wj7if5xq6l 5 лет назад +1

      @@user-qy7yv1ut4c да, в разделе Plugins

    • @user-qb3jj6pj7o
      @user-qb3jj6pj7o 4 года назад

      @@user-wj7if5xq6l ничего не изменилось после этих действий

  • @mihailsoosaar6213
    @mihailsoosaar6213 4 года назад

    сранный ломбок с 11-ой джавой не хочет работать -_-
    пришлось генерить геттеры и сеттеры.
    надеюсь, что пофиксят.

    • @Spiculum24
      @Spiculum24 3 года назад

      У меня он отличное работает на 11, но только с мавеном, а с грэдлом постоянно отваливается.

    • @Spiculum24
      @Spiculum24 3 года назад

      Почитал комменты - добавил annotationProcessor 'org.projectlombok:lombok' в build.gradle - заработало

  • @godzilla65536
    @godzilla65536 3 года назад +1

    Мне этот урок дался очень тяжело, по сравнению с остальными

  • @user-wz6ms3xc5l
    @user-wz6ms3xc5l Год назад +1

    В 2023г всё это больше не работает...

  • @user-pg9xg5ei5t
    @user-pg9xg5ei5t 4 года назад +4

    Кстати, Гугл переделал меню на том сайте, где ключи создаются. Я полчаса тупил над ним, пока создал ключ

    • @user-lw3fi2xi1t
      @user-lw3fi2xi1t 4 года назад +1

      Я конечно рад за тебя, но мне было бы интересно узнать как ты его создал?

    • @user-lw3fi2xi1t
      @user-lw3fi2xi1t 4 года назад +1

      Уже не нужно) Нашел, тоже примерно пол часа потратил))

    • @user-pg9xg5ei5t
      @user-pg9xg5ei5t 4 года назад +1

      @@user-lw3fi2xi1t замечательно)) я просто не у компа был. А с телефона искать так себе

    • @user-hd3rr7nc7b
      @user-hd3rr7nc7b 4 года назад +7

      Спасибо гении, что для всех остальных ответили. В духе "отписал в личку" и "решил сам, всем спасибо". Так вот, ребят, кто не нашёл, инструкция следующая. После создания ключа вас перебрасывает на окно с названием "Окно запроса доступа OAuth". Там после сохранения данных, как в видео, жмёте слева "Учетные данные". Там сверху выбираете снова "СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ". В нём снова "Идентификатор клиента OAuth". И там уже можно выбирать, как на видео.

    • @inginiir
      @inginiir 3 года назад +2

      @@user-hd3rr7nc7b спасибо добрый человек) а то я уже собрался g suite подключать)))

  • @user-hh1zs2xi4o
    @user-hh1zs2xi4o 3 года назад

    Посмотрел видео поставь ЛАЙК. Инфа бесплатная и годная лайк ставить не трудно. Поддержи Автора канала.

  • @munoongg
    @munoongg 4 года назад +1

    Сделал как в видео. Открываю страничку для авторизации - 'org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.oauth2ClientContext': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.'
    Пробовал spring-security-oauth2-autoconfigure версий 2.1.0.RELEASE, 2.1.1.RELEASE, 2.1.2.RELEASE и 2.1.8.RELEASE

    • @godzilla65536
      @godzilla65536 3 года назад

      Мне кажется при настройке приложения в консоли гугла, ты указал неправильные ссылки

  • @retodenis5181
    @retodenis5181 4 года назад +1

    что то в голос с 4 гендеров от гугла :D

    • @Spiculum24
      @Spiculum24 4 года назад +1

      У кого то их около 50. Прошли времена, когда пол был булином

  • @vjotov
    @vjotov 5 лет назад

    In December 2018, we announced our decision to shut down Google+ for consumers in April 2019 due to low usage and challenges involved in maintaining a successful product that meets consumers' expectations.
    Наверно придется переделовать видос...

    • @letsCodeDru
      @letsCodeDru  5 лет назад

      С авторизацией это не связано, все ок

    • @vjotov
      @vjotov 5 лет назад

      letsCode надеюсь FB или VK oAuth тоже так цепляются. Попробую

  • @user-qy7yv1ut4c
    @user-qy7yv1ut4c 3 года назад +1

    The bean 'scopedTarget.oauth2ClientContext', defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2RestOperationsConfiguration$SessionScopedConfiguration$ClientContextConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/security/oauth2/config/annotation/web/configuration/OAuth2ClientConfiguration$OAuth2ClientContextConfiguration.class] and overriding is disabled.
    кто словил?

    • @godzilla65536
      @godzilla65536 3 года назад +2

      Мне помогло указать другую версию для зависимости spring-security-oauth2-autoconfigure. Попробуй поставить 2.1.0.RELEASE

    • @Romigo4
      @Romigo4 3 года назад

      @@godzilla65536 Спасибо, помогло

  • @sviatoslavstasiv6608
    @sviatoslavstasiv6608 4 года назад

    Кто знает, как пофиксить?
    console:
    Cross-Origin Read Blocking (CORB) blocked cross-origin response accounts.google.com/o/oauth2/v2/auth?client_id=426843391767-pemhtu4shq0stv5ghq6auogsoetm8aiu.apps.googleusercontent.com&redirect_uri=localhost:8080/login&response_type=code&scope=openid%20email%20profile&state=RZlSFj with MIME type text/html. See www.chromestatus.com/feature/5629709824032768 for more details.

  • @mirnijalexey2765
    @mirnijalexey2765 3 года назад

    Дуратский lombok, последний раз этой шляпой пользовался

  • @victormog
    @victormog 5 лет назад +2

    Толерастный google...
    🤔

  • @user-mu6lt7kz7b
    @user-mu6lt7kz7b Год назад

    Всем привет!
    кому-то удалось решить эту проблему с oAuth ?
    org.springframework.security.oauth2.client.resource.UserRedirectRequiredException: A redirect is required to get the users approval

  • @D.P._
    @D.P._ 5 лет назад

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

  • @D.P._
    @D.P._ 5 лет назад

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