Spring Boot Security: добавляем регистрацию и авторизацию пользователей в приложение (простой сайт)

Поделиться
HTML-код
  • Опубликовано: 26 сен 2024
  • Spring Boot Web Application (MVC): Добавляем Spring Security (пользователи и авторизация) в приложение. Когда в прложении работает несколько пользователей, им необходимо разделять свои данные. Для решения этой проблемы мы создаём пользовательские аккаунты и применяем для этого фреймворк Spring Security.
    Поддержать проект:
    ➡ Стать спонсором www.youtube.co...
    ➡ Patreon / letscodedru
    ➡ Яндекс.Деньги money.yandex.r...
    ➡ PayPal paypal.me/letscodedru
    ➡ Qiwi qiwi.me/letscode
    Ссылка на git репозиторий из видео:
    github.com/dru...
    Для начала нам необходимо найти нужный гайд на сайте Spring:
    spring.io/guid...
    Следуя руководству, нам необходимо сделать 2 страницы: публичную, роль которой у нас возьмет на себя страница greetings, и доступная после авторизации, роль которой возьмет на себя страница main. Нам потребуется только немного изменить мэппинг страниц и добавить ссылку с главной на приватную страницу.
    Далее мы подключаем зависимость Spring Security, настраиваем модуль вэб-безопасности, и добавляем страницу авторизации.
    По умолчанию, в Spring Security включен механизм CSRF и нам необходимо передавать со всеми формами ключ защиты. Для этого в файле настроек приложения application.properties нужно добавить строку настройки из блокнота:
    gist.github.co...
    В результате мы имеем простейший механизм авторизации в приложении. Проблема в том, что он использует фиксированные учетные записи, хранящиеся в оперативной памяти и все данные пользователей открыто лежать в исходном коде.
    Для добавления возможности хранения учетных записей пользователей в БД, нам нужно изменить настройки Spring Security и создать доменный класс пользователя. Также, нам необходимо добавить страницу регистрации новых пользователей.
    Руководство по mustache:
    mustache.github...
    Руководство по JPA репозиториям:
    docs.spring.io...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Твиттер: / letscodedru
    ➡ Чат в Discord: / discord
    ➡ Группа Вконтакте: letscod...
    ➡ Канал в Telegram: t.me/letsCode_dru
    ➡ Чат в Telegram: t.me/joinchat/...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    Ссылка на плейлист:
    • SDKMan: установка Java...
    Ссылка на канал: / @letscodedru
    Ссылка на Яндекс.Дзен: zen.yandex.ru/...
  • НаукаНаука

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

  • @noyklgd4403
    @noyklgd4403 6 лет назад +140

    Автор молодец, объясняет кратко, доходчиво и по теме... Я последний месяц как раз начал учить спринг, в ютубе очень много видео категории г**на, где сидит чувак и откровенно сопли жует 40 минут, а тут все круто...

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

      100% при этом видосы пятилетней давности, когда еще не было Spring Boot

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

      @@iryna6389 Да ладно - не сильно большая разница- был boot- не было

    • @ВладиславМелехин-е5р
      @ВладиславМелехин-е5р 4 года назад +1

      Однозначно

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

      Другая сторона этого "круто": если где-то опечатался - хрен когда найдёшь ошибку т.к. набирал в режиме мартышки не вникая в суть происходящего.

  • @adaman6352
    @adaman6352 3 года назад +8

    Всё ещё актуальные и интересные уроки, но с такой скоростью подачи автору нужно быть рэпером

  • @BigBizon
    @BigBizon Год назад +2

    Смотрю ваши ролики в 2023, спасибо за ваш труд !!!

  • @kingroy6547
    @kingroy6547 5 лет назад +18

    Доступное пояснение, четкий звук, все на высшем уровне! Огромное человеческое спасибо! Ох как вовремя я попал на эти уроки

  • @07maxmix
    @07maxmix 6 лет назад +9

    Нереальный респект автору! Такой крутой выкладки материала я еще не видел. Кратко, четко, быстро и главное по сути. 20 минут видео пролетают незаметно. Даже отображаешь на экране используемые горячие клавиши. Видно что ты с душой подходишь к делу. Удачи тебе и успехов. У тебя отлично получаеться. продолжай в том же духе!

  • @fedorchernolutsky146
    @fedorchernolutsky146 5 лет назад +37

    Приходится додумывать, почему в форму регистрации передаются логин и пароль, а в обработчике url мы получаем готовый объект User

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

    Блин, мужик, БРАВО! Я просто голову ломаю как это все понять, а ты тут так все доступно, четко и быстро объясняешь . Кайф! Топ контент )

  • @naronwaz7824
    @naronwaz7824 10 месяцев назад +10

    Вместо configurer теперь нужно или можно использовать @Autowired
    public void initialize(
    AuthenticationManagerBuilder builder,
    DataSource dataSource
    ) throws Exception {
    код внутри тот же с заменой auth на builder

    • @noproblem602
      @noproblem602 10 месяцев назад

      Спасибо большое👍

    • @valentinkd3
      @valentinkd3 10 месяцев назад

      Этот комментарий должен быть вверху, спасибо большое)

  • @lexei3290
    @lexei3290 5 лет назад +108

    ля, из-за mustache только больше запутался

  • @ДмитрийЯромка
    @ДмитрийЯромка 6 лет назад +10

    Красавчик, очень полезный контент. Надеюсь канал вырастет в целую школу=)

  • @global_silence2623
    @global_silence2623 6 лет назад +7

    так-то офигенная тема) Вы коротко создаете небольшой проект, который можно будет позже развивать, читая документацию. Это удобнее, когда у тебя есть уже какой-то велосипед, который хоть как-то ездит, и ты его начинаешь допиливать дополнительными знаниями из документации. А сухая документация что-то плохо идет.

  • @ВикторияК-с5ц
    @ВикторияК-с5ц 4 года назад +2

    Крутой подход, спасибо автору. Следовал видео и получилось сделать
    крутой проект, который любопытно "докручивать" самому. Советы автора
    помогают не утонуть в деталях и не потерять мотивацию. Спасибо ребятам в
    комментах - если вы напоролись на ошибку, решения находил здесь же.
    Успехов!

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

    Контент офигеннейший, с которым уже потом можно самостоятельно разбираться. Возможность что-то набросать внушает уверенность в своих силах, спасибо

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

      единственное хотелось бы, чтобы чаще было переключение на проверку результата, чтобы были контрольные точки провверок того, что ненакосячил

  • @АльбертСвірський
    @АльбертСвірський 3 года назад +2

    Видео супер. Все по делу, без соплей!!! Автору огромное спасибо. Такого же плана приложение SpringBoot + Angular или ReactJS было бы, думаю, очень актуально на данный момент.

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

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

  • @silarion4792
    @silarion4792 6 лет назад +121

    Можно при монтаже видео, показывать что вы добавляете а то поле было user.setRoles(Collections.singleton());
    а потом стало user.setRoles(Collections.singleton(Role.USER));

    • @letsCodeDru
      @letsCodeDru  6 лет назад +30

      Сорян, стараюсь не допускать таких ляпов. Видимо, ошибка при монитаже

    • @silarion4792
      @silarion4792 6 лет назад +1

      letsCode спасибо за понимание,буду ждать следующих выпусков)

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

      Спасибо за исправление !))))

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

      @@letsCodeDru что-то с запросом не то. Что такое u. и ur. в u.username и ur.role? Таблицы были названы usr и user_role. Ошибка: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`testspringapp`.`user_role`, CONSTRAINT `FK859n2jvi8ivhui0rl0esws6o` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))

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

      Role не класс а enum типо:
      package хз.где?;
      public enum Role {
      USER;
      }

  • @movie_moment
    @movie_moment Год назад +2

    Курс хороший, дает представление и общение понимание работы разных блоков Спринг. К сожалению, из-за обновлений Спринга, актуальность сейчас ограниченная. Первые 2 урока еще смог подогнать под себя, далее знаний не хватает. Подойдет тем, кто уже достаточно хорошо "шарит" в Спринг. Спасибо за курс!
    Через день: пороже, я уже достаточно хорошо шару, ахах. Удалось все настроить, чтобы было в первых 3 видео. Дальше - больше :)

    • @ТимофійКрасько-к5г
      @ТимофійКрасько-к5г Год назад

      Не подскажешь, как настроил?)

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

      @@ТимофійКрасько-к5г Сейчас детали уже не помню, но все ответы были в комментах под видео, кажется. Если напомните, скину на выходных. У меня была подборка правок. Отдельно стоит сказать, что версия Секьюрити здесь старая и ее нужно будет обновить, как и версию Спринг, если действительно хотите работоспособный расширяемый проект

    • @ТимофійКрасько-к5г
      @ТимофійКрасько-к5г Год назад

      ​@@movie_moment:)

  • @egorsimatov4924
    @egorsimatov4924 2 года назад +7

    Привет из 2022 всем, кто использует thymeleaf , в классе WebSecurityConfig необходимо в конце метода configure добавить ".and().csrf().disable();", иначе при отправке post запросов возникнет 403. Если был полезен, ставьте лукас, буду рад)))

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

      Во-во)) Ты тоже на stackoverflow подсмотрел?))

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

      @@ghostmyxamop600 есть такое)

  • @RAFiqGames
    @RAFiqGames 6 лет назад +2

    Буду краток: Это лучшее что я видел по Spring'у! Объясняешь очень доходчиво!

  • @АлександрБондарев-ъ7ф

    Все круто. Доступно объясняет. Не выводит сообщение при попытке добавления существующего пользователя. Спасибо за ваш труд.

  • @ЕгорМихеев-щ7в
    @ЕгорМихеев-щ7в 4 года назад +3

    Спасибо огромное! Уроки великолепны, все по существу. Продолжайте в том же духе, удачи Вам!

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

    Спасибо за урок! Конечно, очень много вопросов осталось. Но буду разбираться дальше)

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

    Отличное учебное видео-пособие!!! Респект категорически!!!

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

    Очень хороший видеоролик-урок, много́го не знал. Спасибо

  • @oleksandrhusiev6544
    @oleksandrhusiev6544 6 лет назад +2

    Спасибо! Работаю на позиции Java Senior и даже так ваши видео очень полезны, помогают освежить память и узнать много нового.

  • @hfghfggggfg8250
    @hfghfggggfg8250 9 месяцев назад

    Это было тяжело, но я справился с этим. Очень полезный контент из минусов 5 лет+)

  • @paradise_cracked
    @paradise_cracked 6 лет назад +27

    подписался, не глядя, ибо нету современных каналов по boot, только старьё не актуальное

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

      Ну, разобравшись со "старьём", boot заходит намного легче!..

    • @paradise_cracked
      @paradise_cracked 6 лет назад +1

      ну посмотрев ваши ролики однозначно скажу что с нуля их смотреть не получится, я после того как выучил java core долго понимал spring, а у вас сразу с места в карьер, мне норм, а за новичков я бы сказал сложновато.

    • @letsCodeDru
      @letsCodeDru  6 лет назад +13

      мои видео поразумевают некий бэкграунд у новичков. Цель серии видео - помочь раскачаться, начать писать хоть что-то с использованием Spring

    • @ДенисНикифоров-о5и
      @ДенисНикифоров-о5и 6 лет назад +4

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

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

      @@letsCodeDru 1, 5г назад когда только начал изучать java - вобще аут был. Когда да Spring Security досмотрел - понял что вообще труба - ничего не понимаю. Сейчас смотрю тоже видео(есть небольшой багаж знаний по java core, sql, html и web ) заходит совсем по другому. Поэтому бекграунд необходим. Я вот теперь вроде врубаюсь, что происходит даже не зная тонкостей аспектов работы Spring.

  • @МаксимПалий-я4п
    @МаксимПалий-я4п 5 лет назад +13

    Самый главный совет: внимательность!!! Внимательность при повторении кода держать на 200%!)

  • @glebkotruntsev889
    @glebkotruntsev889 Год назад +9

    Сейчас уже WebSecurityConfigurerAdapter устарел. И вот я не понимаю, каким образом мне сделать вход?

    • @dnepr_10
      @dnepr_10 7 месяцев назад

      Как решил??

    • @АндрейДудин-х4б
      @АндрейДудин-х4б 7 месяцев назад

      ты решил? у меня после ввода логина и пароля никуда не уходит@@dnepr_10

    • @mrkai120
      @mrkai120 6 месяцев назад

      ​@@dnepr_10в документации все написано с примерами советую прочитать

    • @carinechekanova
      @carinechekanova 4 месяца назад

      @@dnepr_10 SecurityFilterChain

  • @НИКИТАБЕЛАН-о6ц
    @НИКИТАБЕЛАН-о6ц 3 года назад

    Автор, спасибо за уроки. Коллеги, кто столкнулся с проблемой выпадания стандартной формы логина. Вы уже всё проверили. Переписали и скопировали с сайта заново. Очень важно расположение файлов в вашем проекте. Если вы чувствуете, что у вас что-то не так зайдите на гит хаб из видео и перепроверьте расположение.

  • @ВиталийТуров-д8в

    Этот сайт сразу привлек мое внимание своим оформлением) реально классно играть здесь)

  • @СтаниславГригорьев-о8ю

    Спасибо, очень помогает.
    Все пишу руками, столько опечаток/багов у меня))))
    Но это даже лучше, начинаешь ковырять код и разбираться что к чему.

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

    Как же твой голос мне Тесака напоминает.
    Ролики - супер! Благодарю!

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

    Автор, огромное спасибо, все очень доходчиво и понятно.

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

      Нихрена ничего не понятно

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

      @@kisurov мужчина, в русском сегменте автор один из лучших, если не лучший. Да, чтобы понимать его уроки базовые знания спринга и web у тебя обязаны быть. Совсем с нуля ты спринг по этим урокам не освоишь.

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

    Блин, перед тем как сюда зайти смотрел типа, который делал абру кадабру, нифига не понял. Зашёл сюда и всё чётко и ясно показано.

  • @geladamoria425
    @geladamoria425 5 лет назад +33

    О том, как сервер определяет, авторизирован ли пользователь, авторизирует и т.д., воообще не понятно, честно, метод configure слабо описан, что такое AuthenticationManagerBuilder, какие у него возможности.
    Ты просто записал два скл-запросы и сказал делать так, иначе работать не будет
    Те слепые пятна из статьи сайта спринга так и остались

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

    Спасибо большое за ваши умения и опыт!!!!

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

    Здравствуйте ! Большое спасибо за это видео ! Низкий поклон Вам !

  • @daniil6576
    @daniil6576 6 лет назад

    Сударь, вы отлично объясняете. Продолжайте !

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

    красава Андрей , По больше бы таких проектов !

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

    большое спасибо автору , очень акуратно с базой данных)

  • @ЕвгенийДмитриевич-х6г

    Отличный канал! Отличные видео! Гениальный преподаватель!

  • @simplechannel7859
    @simplechannel7859 6 лет назад +3

    Хорошие уроки. Спасибо!

  • @andreisamusev1473
    @andreisamusev1473 6 лет назад +1

    Великолепные уроки. Спасибо!!!

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

    Автор молодец, хоть разобрался во всем =)

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

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

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

    Крутой урок, очень сильно напоминает на JavaFX только без Scene Builder! Пишешь код, а в Postgres происходит магия...

  • @АнтонПушпышев
    @АнтонПушпышев Год назад

    все круто, отлично вспоминаются основы

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

    Ндааа. Уроки конечно бесценные! Как разбогатею обязательно нажму кнопку Спонсировать.

  • @radist000
    @radist000 4 года назад +11

    Пересмотрел урок уже несколько раз и не могу понять магии переброса со страницы login на страницу main. Ведь у нас в login.mustache в форме - action="/login" (т.е. переадресация обратно на страницу логина). Или я что-то не так понимаю.Дело в том я вообще после ввода пароля, логина остаюсь на странице /login , подскажите пожалуйста как решить

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

      в спринге уже реализованы контроллеры логина на методы post и get, как видно в хтмл коде форма отправляет пост запрос, значит если данные в бд с таким логином и паролем нашлись, тогда пользователя авторизовывает и кидает на мэйн, в другом случае просто остается.

  • @AZ-un6xm
    @AZ-un6xm 5 лет назад

    Спасибо автору. очень познавательно. Обучаю на этом канале.

  • @GUGI-VUGI
    @GUGI-VUGI 11 месяцев назад

    Отлично объясняешь!

  • @ВладимирБеломестнов-м2м

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

  • @МаксимРазумков-х9х

    Крутые видосы. Огромное спасибо.

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

    Автору как говорит Павел Воля: *Respect и Уважуха*

  • @dmitriy5395
    @dmitriy5395 4 года назад +7

    Спасибо большое за уроки, до сих пор актуально!
    Но остался один нерешенный вопрос.
    Без маппинга /login - не работает страница логина. Начал разбираться в чем проблема, пришел к тому, что в MvcConfig -> метод addViewController не используется, при условии, что аннотация @Configuration присутствует.

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

      А что тогда делать?

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

    подскажите пожалуйста, после авторизации меня перебрасывает на / а в видео на /main, не могу понять где поправить это

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

    Ого! Отличное видео! Спасибо. Жаль что подписаться больше одного раза нельзя)))

  • @fame_off
    @fame_off 6 лет назад +35

    Продолжай, плз

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

      Обязательно. Не могу отказать подписчику)

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

    Просто красавчик, обожаю

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

    Спасибо большое за уроки! Очень круто и быстро наращивается проект!
    После логина отправляет на стартовую greeting page... Хоть логин и проходит успешно, но хотелось бы чтобы возвращал main page. А логика login как-то заинкапсулирована и не вижу места, где можно перенаправить на Main page.

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

      решил?

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

      В WebSecurityConfig между .formLogin() и .loginPage("/login") добавьте .defaultSuccessUrl("/main")

  • @rybiizhir
    @rybiizhir 5 лет назад +22

    Не получается, вылазит дефолтная login форма, что делать не ясно.

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

      Такая же проблема

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

      ругается на то что No method or field with name '_csrf' . хотя один в один с нижним подчеркиванием

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

      @@MrMusinRamil В MvcConfig проверьте setViewName чтобы стоял ("login")

    • @АртёмКорякин-э2в
      @АртёмКорякин-э2в 5 лет назад +2

      @@MrMusinRamil , посмотри что бы в input login и main значение name="_csrf". У меня на этом затык был.

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

      @@АртёмКорякин-э2в все правильно стоит: name="_csrf" видимо проблема в другом

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

    Отличные уроки! Но зачем так быстро? Зачем вырезать нужные моменты?

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

    Классные видео! Спасибо!

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

    Просто великолепно!!!

  • @alexandrkubanov3993
    @alexandrkubanov3993 6 лет назад +6

    Приветствую,Андрей.
    Если не сложно,можешь объяснить каким образом работает страница логин, где мы описываем логику пошагово именно проверки введенных данных пользователем и сравниваем их с данными в БД.
    Пример: Пользователь ввел три раза не правильно пароль от логина, то как и где мы можем описать и отследить в коде всю логику?
    Заранее благодарен.

  • @timur6444
    @timur6444 6 лет назад +11

    Здравствуйте. До этого всё заработало, но после регистрации пытаюсь войти и тут выбрасывает на страницу авторизации. см. 18:22. Как вам могу скинуть код?

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

      скорее всего как было у меня, сбился путь в acction= " " в форме, должно быть только название пост запроса но не папок где лежат страницы

    • @Михаил-ф1о3у
      @Михаил-ф1о3у 4 года назад

      У меня возникла такая же проблема. У вас получилось её исправить?

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

      ​@@Михаил-ф1о3у если я правильно понял проблему, то у меня было подобное. Оказалось, что в сущности User поле "username" должно называться именно "username". У меня было "firstName", поэтому пользователь не пог пройти авторизацию.

  • @ОлегКостенецкий
    @ОлегКостенецкий 6 лет назад +1

    Ждём продолжения))

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

      завтра с утра будет :)

  • @electrobuz
    @electrobuz Год назад +2

    Странная ситуация. Сейчас куски кода в спринг гайде отличаются от видео. И они нифига не работают. Если заменять их на куски из видео, то норм. Но это же не дело, почему так происходит
    Например, WebSecurityConfig отличается кардинально. В видео он наследуется от WebSecurityConfigurerAdapter и переопределяет методы, а в текущем гайде ничего не наследует и выглядит совсем по-другому.

    • @ant1k-1
      @ant1k-1 Год назад

      в новой версии спринга как я понял немного перелопатили это

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

    Довольно интересно и то что надо

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

      интересно, что поле active у пользователя обязательно, и если его не сетать на тру при регистрации, то аунтифицироваться не выйдет

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

      после аунтификации, добавление сообщений не работает...может ошибся, а может надо посмотреть следующий урок

  • @ЕвгенийАндреев-ы2ь
    @ЕвгенийАндреев-ы2ь 5 лет назад +2

    Если у кого-то будут записываться null значения в БД, проверяйте названия переменных (даже на РЕГИСТР) в сущностях и названиях полей на формах. Для меня было неприятной неожиданностью исправлять такой баг

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

    Так-с прошел этот ад. Поехали к следующему. Непонял все-таки, почему код с сайта спринга не работает

  • @hyperborean72
    @hyperborean72 6 лет назад +1

    Грандиозно.
    Правда, очень здорово, что вы взялись осветить эту тухлую тему.
    Поясните, зачем все же вы инициализировали коллекцию ролей вновь заведенного пользователя через Collections.singleton()
    2-ой вопрос: в метод addUser() вы взяли и добавили Map.
    - А мог бы этот метод остаться без этого параметра?
    - А где эта карта инициализируется?
    - А какие типы данных для ключа-значения допустимы - чем-то это регулируется?
    Заранее спасибо

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

      Синглтон создаёт ооочень простую имплементацию коллекции в 1 элемент

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

      Инициализируется спрингом, можно и без этого, но нам же нужен интерактив?
      Любые значения от пользователя в примитивных типах

  • @NaIstine
    @NaIstine 4 года назад +5

    не авторизовывается User проверил код все как на видео

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

    спасибо за видео!

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

    автор огромное спасибо

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

    Неплохо бы ещё сделать с passwordEncoder и со своим юзером, имплементируя userdetailservice. Я думаю это часто используемая в реальной жизни вещь. Пришлось потратить время, чтобы это сделать.

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

    кто страдает от непонимания почему не работает сочетание клавиш alt + shift + v то попробуйте alt + ctrl + v и у вас все получится.

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

      можно еще написать .var после создания объекта

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

    Красавчик, правда нихрена непонятно :)

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

    Всем добрый день. Андрей, спасибо за уроки.
    Пересмотрел урок уже несколько раз (и несколько последующих) и не могу понять магии переброса со страницы login на страницу main. Ведь у нас в login.mustache в форме - action="/login" (т.е. переадресация обратно на страницу логина). Или я что-то не так понимаю.
    И еще. Хотел добавить на странице main приветствие (аля "Привет, u", где u - имя пользователя в БД). Как строить запрос к базе, чтобы выдернуть текущего пользователя?

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

      Сам отвечу на вторую часть своего вопроса. (Про action="/login" все еще актуальна)
      Так вот. Чтобы вписать логин текущего пользователя в любом месте страницы, необходимо добавить
      ${Session.SPRING_SECURITY_CONTEXT.authentication.principal.getUsername()}
      (это показано в уроке №8)

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

    @Autowired
    private DataSource dataSource; Подчеркивает красным - dataSource
    11:05 Как его легко получить? У меня не получает.

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

      проблема в версии
      проект написан на буте 2.0.0 релиз

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

      измени версию проекта на эту
      и всё тип топ будет

  • @МаксимВорочаев
    @МаксимВорочаев 4 года назад

    Забыл записать, что добавить "/registration" нужно в permitAll, видео прям совсем для новичков, вряд ли они чему научат, а может и ещё больше запутают, потому как пример делается по гайду без объяснений и разбираний отдельных реально важных и ключевых моментов, без которых много чего будет людям непонятно. У нас такой препод был, который читал лекцию по книге, которую мы и сами могли почитать.. ну ты понял))))
    Ну и тем более так как в этом примере в реальной жизни никто не делает.

  • @БогданСайкевич
    @БогданСайкевич 6 лет назад +16

    Большое спасибо за видео! Очень интересно и познавательно.
    Хочу отметить, что уменя при @Autowired dataSource-а возникает ошибка:
    "Could not autowire. There is more than one bean of 'DataSource' type.
    Beans:
    dataSource (DataSourceConfiguration.class) dataSource (DataSourceConfiguration.class)".
    После добавления @Qualifier("dataSource") все работает.
    Может, кому-то поможет)

    • @OtariRu
      @OtariRu 6 лет назад

      Была такая же проблема. Сидел на 2016 idea обновил до 18, помогло.

  • @АртёмКурилко-н6ч
    @АртёмКурилко-н6ч 4 года назад

    Отличное видео, правда хотелось бы увидеть подобное на случай если у нас есть ограничения, вроде минимум 8 символов в пароле и т.д.

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

    Спасибо за урок!
    Для тех, у кого следующая ошибка:
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed;
    У меня в User использовалось не то пространство имен.
    Было: import org.springframework.data.annotation.Id;
    А надо: import javax.persistence.Id;
    Удачи!

  • @ЯрославМартиненко-и6й

    Объясните пожалуйста откуда приходит входной параметр User user в методе addUser (класс - RegistrationController)? На странице "registration" форма отправляет только 2 параметра: username и password, откуда берется класс user в качестве входного праметра?

    • @МаксимПалий-я4п
      @МаксимПалий-я4п 5 лет назад +2

      Поддерживаю вопрос! Сам мучаюсь и не понимаю на каком уровне происходит этот маппинг...

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

    У меня проблема при запуске проекта по дефолту первой страницей выдает форму Логина и я пытаюсь залогинится и выдает ошибку, вроде бы всё делал как в видео но почему первая страница Логин

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

    Где указывается страница, куда нас спринг кидает после логина?

  • @АлександрМакаров-ъ9ъ8б

    Почему UserRepo расширяется именно от JpaRepository а не CrudRepository ?

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

    Меня вот что интересует... почему в messeges у нас есть конструктор, а в user нет? Даже пустого нет конструктора... у меня возникла проблема из-за этого. При отправке формы не передавался параметр username, только password. Т. е. username = null, password = ***. Пока я не сделал так же, как и модель месседжей - не работало.

    • @АлексейКазаринов-э6с
      @АлексейКазаринов-э6с 4 года назад

      Аналогично, в дебаггере поля user null. Автор видео в комментах писал, что спринг достаточно умён, чтобы обернуть данные формы в user, но на деле это не происходит почему-то.

    • @АлексейКазаринов-э6с
      @АлексейКазаринов-э6с 4 года назад

      Известно почему, нужно добавить пустой конструктор в класс User, а также геттеры и сеттеры для всех его полей. Тогда спринг сможет им оперировать по-умному

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

    у меня не работало, пока в application.properties не добавил строку spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

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

    Лучший!

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

    thanks! really useful

  • @АлександрЯковенко-ь2ш

    с концовки вголос проорал))

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

    Доброе времечко :)
    Хороший курс. Но возник вопрос. Получается при таком описани таблиц в базе данных получается индексы таблиц идут в сторону увеличения и значение id (ключа) всегда увеличивается для всех таблиц, и как следствите ключ таблицы не всегда следующее значение. Можно ли это как-то исправить? Спасибо.

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

      change strategy for @GeneratedValue to strategy=GenerationType.IDENTITY

  • @shtan5583
    @shtan5583 6 лет назад +7

    Не знаю почему, но в моем случае после авторизации идет перенаправление не в /main, а в /greeting. Еще немного непонятно в каком месте происходит обработка запроса авторизации /login, ведь в контроллерах нет явной аннотации с таким маппингом. Спасибо

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

      возращает обратно на ресурс, с которого был переход на /login

  • @gennadyshevchenko7940
    @gennadyshevchenko7940 6 лет назад +2

    не совсем понятно, зачем эти две строки нужны:
    .usersByUsernameQuery("select username, password, active from usr where username=?")
    .authoritiesByUsernameQuery("select u.username, ur.roles from usr u inner join user_role ur on u.id = ur.user_id where username=?");
    }

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

      @letscode Автор, ответь, пожалуйста, если не трудно. Тоже интересует момент откуда берутся значения подставляемые вместо вопросв(ПрипэйрэдСтэйтменты в общем)?

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

      Июнь 2019. Не ответит он, хлопцы...

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

    в коментах столько боли))) я люблю Spring)))

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

    После ввода логина и пароля моя страница просто перезагружается и просит снова ввести логин и пароль

    • @bodyas.5592
      @bodyas.5592 4 года назад

      Решил?

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

      @@bodyas.5592 а ты решил?

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

    В thymeleaf также нужно добавлять csrf токен, иначе post запросы в формах не будут выполняться:
    Например, вот здесь: