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

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ต.ค. 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 минут видео пролетают незаметно. Даже отображаешь на экране используемые горячие клавиши. Видно что ты с душой подходишь к делу. Удачи тебе и успехов. У тебя отлично получаеться. продолжай в том же духе!

  • @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 5 ปีที่แล้ว

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

    • @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;
      }

  • @stasalesh9922
    @stasalesh9922 4 ปีที่แล้ว +4

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

  • @dmitriywhite8279
    @dmitriywhite8279 6 ปีที่แล้ว +9

    Спасибо тебе большущее!! засмотрел видео до дыр, неважно (надеюсь) с какого раза, но смог это реализовать в своём проекте. Отдельная благодарность, что видео с современными технологиями и практиками, а не примеры 2014 года ) Подписался, буду расти с каналом (шучу, конечно же быстрее =) )

  • @fedorchernolutsky146
    @fedorchernolutsky146 5 ปีที่แล้ว +37

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

  • @global_silence2623
    @global_silence2623 6 ปีที่แล้ว +7

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

  • @lexei3290
    @lexei3290 5 ปีที่แล้ว +108

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

  • @ДмитрийЯромка
    @ДмитрийЯромка 6 ปีที่แล้ว +10

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

  • @ЕгорМихеев-щ7в
    @ЕгорМихеев-щ7в 4 ปีที่แล้ว +3

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

  • @Katar1x
    @Katar1x 3 ปีที่แล้ว

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

  • @naronwaz7824
    @naronwaz7824 11 หลายเดือนก่อน +10

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

    • @noproblem602
      @noproblem602 11 หลายเดือนก่อน

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

    • @valentinkd3
      @valentinkd3 11 หลายเดือนก่อน

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

  • @pvtitov
    @pvtitov 4 ปีที่แล้ว +1

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

    • @pvtitov
      @pvtitov 4 ปีที่แล้ว

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

  • @АльбертСвірський
    @АльбертСвірський 3 ปีที่แล้ว +2

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

  • @ВикторияК-с5ц
    @ВикторияК-с5ц 4 ปีที่แล้ว +2

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

  • @МаксимПалий-я4п
    @МаксимПалий-я4п 6 ปีที่แล้ว +13

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

  • @АлександрБондарев-ъ7ф
    @АлександрБондарев-ъ7ф 5 ปีที่แล้ว

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

  • @RAFiqGames
    @RAFiqGames 6 ปีที่แล้ว +2

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

  • @cannibalirk3055
    @cannibalirk3055 3 ปีที่แล้ว +1

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

  • @oleksandrhusiev6544
    @oleksandrhusiev6544 6 ปีที่แล้ว +2

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

  • @egorsimatov4924
    @egorsimatov4924 2 ปีที่แล้ว +7

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

    • @ghostmyxamop600
      @ghostmyxamop600 2 ปีที่แล้ว

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

    • @egorsimatov4924
      @egorsimatov4924 2 ปีที่แล้ว

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

  • @esimitley4729
    @esimitley4729 ปีที่แล้ว

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

  • @geladamoria425
    @geladamoria425 5 ปีที่แล้ว +33

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

  • @dmitriy5395
    @dmitriy5395 4 ปีที่แล้ว +7

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

    • @innarrt
      @innarrt ปีที่แล้ว

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

  • @motordrive73
    @motordrive73 2 ปีที่แล้ว +1

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

  • @OkoloIlya
    @OkoloIlya 4 ปีที่แล้ว +1

    Очень крутые туториалы, удачно выбрана подача материала. Спасибо

  • @hfghfggggfg8250
    @hfghfggggfg8250 9 หลายเดือนก่อน

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

  • @ВиталийТуров-д8в
    @ВиталийТуров-д8в ปีที่แล้ว

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

  • @hasanov2094
    @hasanov2094 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.

  • @DEVKA777
    @DEVKA777 5 ปีที่แล้ว +2

    Автор! Огромнейшее спасибо!!!! Продолжайте пожалуйста!

  • @СтаниславГригорьев-о8ю
    @СтаниславГригорьев-о8ю 2 ปีที่แล้ว

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

  • @movie_moment
    @movie_moment ปีที่แล้ว +2

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

    • @ТимофійКрасько-к5г
      @ТимофійКрасько-к5г ปีที่แล้ว

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

    • @movie_moment
      @movie_moment ปีที่แล้ว

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

    • @ТимофійКрасько-к5г
      @ТимофійКрасько-к5г ปีที่แล้ว

      ​@@movie_moment:)

  • @radist000
    @radist000 4 ปีที่แล้ว +11

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

    • @neonchik6768
      @neonchik6768 4 ปีที่แล้ว +1

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

  • @oleksandr3275
    @oleksandr3275 5 ปีที่แล้ว

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

  • @igorsurv2174
    @igorsurv2174 5 ปีที่แล้ว +2

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

    • @kisurov
      @kisurov 4 ปีที่แล้ว

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

    • @igorsurv2174
      @igorsurv2174 4 ปีที่แล้ว +1

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

  • @НИКИТАБЕЛАН-о6ц
    @НИКИТАБЕЛАН-о6ц 3 ปีที่แล้ว

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

  • @Antonio-b6f5b
    @Antonio-b6f5b 4 ปีที่แล้ว

    Спасибо большое. ОЧЕНЬ полезное видео. Настоящий quick start.

  • @gherzio
    @gherzio 4 ปีที่แล้ว

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

  • @AnnaSmirnova1
    @AnnaSmirnova1 5 ปีที่แล้ว +1

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

  • @dnevnik_antonio
    @dnevnik_antonio 2 ปีที่แล้ว

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

  • @glebkotruntsev889
    @glebkotruntsev889 ปีที่แล้ว +9

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

    • @dnepr_10
      @dnepr_10 8 หลายเดือนก่อน

      Как решил??

    • @АндрейДудин-х4б
      @АндрейДудин-х4б 7 หลายเดือนก่อน

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

    • @mrkai120
      @mrkai120 7 หลายเดือนก่อน

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

    • @carinechekanova
      @carinechekanova 5 หลายเดือนก่อน

      @@dnepr_10 SecurityFilterChain

  • @daniil6576
    @daniil6576 6 ปีที่แล้ว

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

  • @edwardzombie9222
    @edwardzombie9222 3 ปีที่แล้ว +1

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

  • @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")

  • @GUGI-VUGI
    @GUGI-VUGI ปีที่แล้ว

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

  • @JMunkush
    @JMunkush 2 ปีที่แล้ว

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

  • @simplechannel7859
    @simplechannel7859 6 ปีที่แล้ว +3

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

  • @andreisamusev1473
    @andreisamusev1473 6 ปีที่แล้ว +1

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

  • @vladimirilintcov6924
    @vladimirilintcov6924 3 ปีที่แล้ว

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

  • @vyacheslavpesterev3861
    @vyacheslavpesterev3861 5 ปีที่แล้ว +17

    Если получили ошибку
    java.sql.SQLFeatureNotSupportedException: Метод org.postgresql.jdbc.PgConnection.createClob() ещё не реализован
    Пропишите в application.properties строчку:
    spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

    • @sergeigrimanov5971
      @sergeigrimanov5971 5 ปีที่แล้ว

      Спасибо добрый человек. Земной тебе поклон!

  • @vladkapsky8292
    @vladkapsky8292 5 ปีที่แล้ว +1

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

  • @D.P._
    @D.P._ 5 ปีที่แล้ว +1

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

  • @alexandrkubanov3993
    @alexandrkubanov3993 6 ปีที่แล้ว +6

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

  • @АнтонПушпышев
    @АнтонПушпышев 2 ปีที่แล้ว

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

  • @ЕвгенийДмитриевич-х6г
    @ЕвгенийДмитриевич-х6г 5 ปีที่แล้ว +1

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

  • @KeepOfTheLight312
    @KeepOfTheLight312 3 ปีที่แล้ว

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

  • @electrobuz
    @electrobuz ปีที่แล้ว +2

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

    • @ant1k-1
      @ant1k-1 ปีที่แล้ว

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

  • @hyperborean72
    @hyperborean72 6 ปีที่แล้ว +1

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

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +1

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

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว

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

  • @СергейШапочкин-з1м
    @СергейШапочкин-з1м 2 ปีที่แล้ว +4

    почему у меня в каждом уроке какие то проблемы( жесть, всё также делаю и какая нибудь фигня. В конце вообще приложение не запускается что то пишет с application

  • @antistress_pro
    @antistress_pro 6 ปีที่แล้ว +1

    Безусловно, очень и очень замечательные уроки. Спасибо! Как побороть это кол-во магии в коде? Пока смотришь, почти всё понятно, но когда пытаешься сам сделать, то становится понятно, что ничего не понял)) Подскажите, стоит на этапе обучения тратить время на jax-rs и jsp или уже совсем старьё? Мне оно как-то более понятным показалось.

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว

      1) смириться и писать больше кода
      2) jsp морально устарел, не стоит тратить время

    • @antistress_pro
      @antistress_pro 6 ปีที่แล้ว

      Спасибо, Андрей!

  • @DankoBLR
    @DankoBLR 4 ปีที่แล้ว +3

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

    • @narimo2773
      @narimo2773 4 ปีที่แล้ว

      change strategy for @GeneratedValue to strategy=GenerationType.IDENTITY

  • @ВладимирБеломестнов-м2м
    @ВладимирБеломестнов-м2м 6 ปีที่แล้ว

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

  • @AZ-un6xm
    @AZ-un6xm 5 ปีที่แล้ว

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

  • @adletbakyt6360
    @adletbakyt6360 5 ปีที่แล้ว

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

  • @serhiivorobiov5794
    @serhiivorobiov5794 6 ปีที่แล้ว +5

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

    • @serhiivorobiov5794
      @serhiivorobiov5794 5 ปีที่แล้ว +4

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

  • @МаксимРазумков-х9х
    @МаксимРазумков-х9х 5 ปีที่แล้ว

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

  • @iryna6389
    @iryna6389 5 ปีที่แล้ว +1

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

    • @letsCodeDru
      @letsCodeDru  5 ปีที่แล้ว

      Можно сравнить код с моим. Как это делать - можно посмотреть в видео на канале

  • @askhat1654
    @askhat1654 6 ปีที่แล้ว

    Привет. Спасибо за отличные уроки. Вопрос, типы данных в самой таблице автоматом создаются varchar, а если брать реальные приложения то типы данных мы должны создавать из приложения или уже после в самой БД?

  • @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", поэтому пользователь не пог пройти авторизацию.

  • @Pifchi
    @Pifchi 2 ปีที่แล้ว

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

  • @БогданСайкевич
    @БогданСайкевич 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, помогло.

  • @inginiir
    @inginiir 4 ปีที่แล้ว +4

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

  • @d_dunkin
    @d_dunkin 5 ปีที่แล้ว +4

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

  • @amreyevakay8518
    @amreyevakay8518 6 ปีที่แล้ว

    Спасибо за уроки. Вы лучший.
    Подскажите,
    Какой дистр линукса вы используете?

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว

      Сейчас Kubuntu. Но в целом очень нравятся все дистрибутивы из семейства debian

  • @ЯрославМартиненко-и6й
    @ЯрославМартиненко-и6й 5 ปีที่แล้ว +3

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

    • @МаксимПалий-я4п
      @МаксимПалий-я4п 5 ปีที่แล้ว +2

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

  • @romanmotovilov129
    @romanmotovilov129 4 ปีที่แล้ว

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

  • @hyperborean72
    @hyperborean72 5 ปีที่แล้ว

    Здравствуйте, Андрей,
    поясните, пожалуйста,
    в виде чего вернёт данные запрос, который заполняет authorities (вы поясняете @ 12:50) - JSON?
    Вы оперируете таблицами, значит ваш запрос в JPQL? Или я ошибаюсь?
    Я, если честно, не понимаю, в чем смысл писать запрос к таблицам, но не на нативном SQL - просто чтобы в данном месте кода не отсылать к внешнему запросу?
    Андрей, позвольте отметить, что на мой взгляд, есть две другие и, как мне кажется, более простые и очевидные формы записи:
    1. если запрос следующий: select u from User u, т.е. вы оперируете не таблицами, а сущностью,
    то Hibernate возьмет на себя извлечение всех данных о пользователе, включая вложенные либо связанные коллекции.
    Никакие неочевидные джойны в запросе в этом случае не нужны.
    2. если воспользоваться Spring JPA, то, удивительно, но даже этот запрос можно не писать, а воспользоваться описанным здесь
    docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference/html/jpa.repositories.html#jpa.query-methods.query-creation
    так называемым Query Creation From Method Name

  • @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" видимо проблема в другом

  • @fame_off
    @fame_off 6 ปีที่แล้ว +35

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

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +6

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

  • @matriks2007
    @matriks2007 3 ปีที่แล้ว

    Добрый день!
    Видео очень крутые, хотел спросить у Вас, а курсы платные у Вас есть?

  • @mkrugl
    @mkrugl 4 ปีที่แล้ว

    Подскажите пожалуйста, а когда можно будет изучать Spring? На данный момент разбираю многопоточность, а после буду изучать перечисления и автоупаковка, обобщения, лямбда выражения, модули. Занимаюсь по книге Java “Руководство для начинающих”. Достаточно ли будет ее?

  • @muhtoryusufjanov3946
    @muhtoryusufjanov3946 5 ปีที่แล้ว

    спасибо за уроки благодарю (пока не все понимаю ) но автор молодец

  • @electrobuz
    @electrobuz ปีที่แล้ว +1

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

  • @joizjy
    @joizjy 4 ปีที่แล้ว +1

    Все круто, но подскажите от куда RegistrationController взял объект user? Кто и где нам его собрал и передал в метод? Ведь из формы у нас выходят просто поля.=\

    • @eapogodin
      @eapogodin 4 ปีที่แล้ว

      Это Spring сопоставил поля объекта User и поля POST запроса "/registration" с формы

  • @АлександрМясников-й2щ
    @АлександрМясников-й2щ 5 ปีที่แล้ว

    Круто, конечно, но непонятно ж совсем.. Надеюсь будут видео с пояснениями.
    И ещё: почему ломбок не используешь?

  • @ant4197
    @ant4197 6 ปีที่แล้ว +1

    ты крут, парень. сколько опыта у тебя в Springe и в программировании в общем?

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +5

      В сфере больше 10 лет, со спрингом лет 6 уже, наверное

  • @shtan5583
    @shtan5583 6 ปีที่แล้ว +7

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

    • @xumichemist3054
      @xumichemist3054 2 ปีที่แล้ว

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

  • @hyperborean72
    @hyperborean72 5 ปีที่แล้ว

    Андрей,
    не поясните, зачем нужно переопределять #configure(AuthenticationManagerBuilder) и декларировать #usersByUsernameQuery, если поиск пользователя на самом деле осуществляется в UserRepo#findByUsername?

  • @denisk8360
    @denisk8360 5 ปีที่แล้ว

    Андрей, респект за уроки! Столкнулся с траблой. Почему-то после авторизации не редиректит на main, а переходит на корень '/'. Стараюсь писать сам, не копирая ваш проект с гита, может где-то накосячил...

    • @denisk8360
      @denisk8360 5 ปีที่แล้ว

      Если разлогиниться, а потом залогиниться, то переходит на корень. Если вначале вбить main, он редиректит на login, логинишься и тогда редиректит на main. Что конечно логично.

  • @simplechannel7859
    @simplechannel7859 5 ปีที่แล้ว

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

  • @Tpona
    @Tpona 5 ปีที่แล้ว

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

  • @ЕвгенийАндреев-ы2ь
    @ЕвгенийАндреев-ы2ь 5 ปีที่แล้ว +2

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

  • @iorgankrat1118
    @iorgankrat1118 6 ปีที่แล้ว

    и хотел еще задать вопрос. Какими вы источниками пользовались для изучения java и что кроме спринга посоветуете выучить чтобы работодатели остались довольны? Спасибо за внимание)

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว

      Источники - интернет и книга Шилдта)) точнее не скажу. Кроме спринта с гибернейтом для старта особо больше ничего не надо. Знание какого-нибудь js фреймворка сильно поможет, конечно, если в вэб идёте, но тоже не мастхэв. Вообще работодателю угождать пытаться не надо, это почти нереально. Нарабатывайте опыт, рассказывайте о нем на собеседовании, нормальный работодатель такие рассказы любит больше, чем тупые вопросы типа "сколько контекстов в может быть в спринг приложении"

  • @DenissGoodd
    @DenissGoodd 4 ปีที่แล้ว

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

    • @DenissGoodd
      @DenissGoodd 4 ปีที่แล้ว

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

    • @DenissGoodd
      @DenissGoodd 4 ปีที่แล้ว

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

  • @adiletzhuzupbekov9530
    @adiletzhuzupbekov9530 5 ปีที่แล้ว

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

  • @ОлегКостенецкий
    @ОлегКостенецкий 6 ปีที่แล้ว +1

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

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +1

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