Всем привет!
Меня вчера почти победил MyBatis. Никак не получалось настроить его через xml. Уже почти сдалась и написала своему проверяющему может не надо его настраивать, но он сказал надо) Но вроде не обязательно через xml. Написала бин, через класс конфигурации, написала метод с аннотациями. Заработало наполовину.
Пошла смотреть в интернет, что же я упускаю, результат неправильно собирался из базы. Все дополнительные поля, получающиеся от соединений (left join), не маппились, а получались null.
Снова попыталась прописать маппинг через xml, потом попалась аннотация result. Нашла хорошую статью с применением этой аннотации, применила у себя. Получилось со второго раза и, наконец я победила этот myBatis!
Но может быть надо научиться и через xml его настраивать. Но пока надо выполнить следующее задание к понедельнику. Подключить и применить RabbitMQ, а ещё Feign.
Про feign я до этого не слышала. Мы на курсе использовали restTemplate для общения микросервисов. Там клиента создавали, помню не с первого раза у меня получалось, прописывала заголовки, замысловатый конструктор для клиента. А у коллег с курса этот клиент никак не хотел инжектиться по autowire.
Feign же настраивается с помощью пары аннотаций и выглядит как огромное упрощение по сравнению с restTemplate. От нас требуется только поставить аннотацию, разрешающую feign и прописать интерфейс с нужными аннотациями, а имплементация за нас будет сделана во время работы нашего приложения.
Ссылка на статью о Feign.
Меня вчера почти победил MyBatis. Никак не получалось настроить его через xml. Уже почти сдалась и написала своему проверяющему может не надо его настраивать, но он сказал надо) Но вроде не обязательно через xml. Написала бин, через класс конфигурации, написала метод с аннотациями. Заработало наполовину.
Пошла смотреть в интернет, что же я упускаю, результат неправильно собирался из базы. Все дополнительные поля, получающиеся от соединений (left join), не маппились, а получались null.
Снова попыталась прописать маппинг через xml, потом попалась аннотация result. Нашла хорошую статью с применением этой аннотации, применила у себя. Получилось со второго раза и, наконец я победила этот myBatis!
Но может быть надо научиться и через xml его настраивать. Но пока надо выполнить следующее задание к понедельнику. Подключить и применить RabbitMQ, а ещё Feign.
Про feign я до этого не слышала. Мы на курсе использовали restTemplate для общения микросервисов. Там клиента создавали, помню не с первого раза у меня получалось, прописывала заголовки, замысловатый конструктор для клиента. А у коллег с курса этот клиент никак не хотел инжектиться по autowire.
Feign же настраивается с помощью пары аннотаций и выглядит как огромное упрощение по сравнению с restTemplate. От нас требуется только поставить аннотацию, разрешающую feign и прописать интерфейс с нужными аннотациями, а имплементация за нас будет сделана во время работы нашего приложения.
Ссылка на статью о Feign.
🔥9
Всем привет!
Сегодня такой баг отловила, такой баг. Потратила даже не знаю сколько времени на него и он такой простой оказался, что решила поделиться и рассказать про свое приключение😅
В общем, подключала сегодня Feign клиента, того самого, который подключается-то за одну аннотацию у людей с прямыми руками😁
Подключаю нужную зависимость, даже убираю транзитивную с уязвимостью, ставлю нужную аннотацию, @EnableFeignClients, завожу интерфейс с нужным клиентом, ставлю над ним аннотацию @FeignClient, прописываю ему имя в скобках и url по которому будет отправлен запрос. Запускаю - ошибка "необходимо указать имя или значение для FeignClient".
Перехожу на свой клиент, перечитываю ещё раз, что у меня написано имя, меняю на value - ошибка та же.
Пошла в гугл, посмотрела разные статьи, документацию, указываешь произвольное имя в скобках аннотации и всё, как говорит amigoscode из YouTube - job done.
Сегодня смотрела его курс по микросервисам, там тоже было подключение Feign клиента, добавила как у него в @EnableFeignClients в скобках basePackage и указала где искать моего клиента. Та же ошибка.
Спрашиваю чат gpt, подсказывает мне подключить другую зависимость дополнительно, попробовала - безрезультатно. Пошла снова в гугл, попробовала разные версии зависимостей, разные дополнительные зависимости. "Нет имени или значения" и все тут.
В один момент, когда игралась с версиями зависимостей подключила несовместимую с Java 11 и ошибка появилась другая и открылось место, где была моя ошибка.
Как бы вы думали, в чем она была?
Оказалось, что я сначала создала клиента для другого сервиса, поставила над ним аннотацию, но не стала настраивать, потому что захотела сначала настроить другой клиент для другого сервиса. И, конечно, же, у него действительно не было ни имени ни значения в параметрах аннотации, ведь я пока не собиралась его использовать.
Ну вот как так можно? 😅
Сегодня такой баг отловила, такой баг. Потратила даже не знаю сколько времени на него и он такой простой оказался, что решила поделиться и рассказать про свое приключение😅
В общем, подключала сегодня Feign клиента, того самого, который подключается-то за одну аннотацию у людей с прямыми руками😁
Подключаю нужную зависимость, даже убираю транзитивную с уязвимостью, ставлю нужную аннотацию, @EnableFeignClients, завожу интерфейс с нужным клиентом, ставлю над ним аннотацию @FeignClient, прописываю ему имя в скобках и url по которому будет отправлен запрос. Запускаю - ошибка "необходимо указать имя или значение для FeignClient".
Перехожу на свой клиент, перечитываю ещё раз, что у меня написано имя, меняю на value - ошибка та же.
Пошла в гугл, посмотрела разные статьи, документацию, указываешь произвольное имя в скобках аннотации и всё, как говорит amigoscode из YouTube - job done.
Сегодня смотрела его курс по микросервисам, там тоже было подключение Feign клиента, добавила как у него в @EnableFeignClients в скобках basePackage и указала где искать моего клиента. Та же ошибка.
Спрашиваю чат gpt, подсказывает мне подключить другую зависимость дополнительно, попробовала - безрезультатно. Пошла снова в гугл, попробовала разные версии зависимостей, разные дополнительные зависимости. "Нет имени или значения" и все тут.
В один момент, когда игралась с версиями зависимостей подключила несовместимую с Java 11 и ошибка появилась другая и открылось место, где была моя ошибка.
Как бы вы думали, в чем она была?
Оказалось, что я сначала создала клиента для другого сервиса, поставила над ним аннотацию, но не стала настраивать, потому что захотела сначала настроить другой клиент для другого сервиса. И, конечно, же, у него действительно не было ни имени ни значения в параметрах аннотации, ведь я пока не собиралась его использовать.
Ну вот как так можно? 😅
😁5👍2
Всем привет!
Второй день "играю" в девопса. Пытаюсь настроить GitHub Actions. В принципе, у меня уже делается проверка по чекстайлу, плагину spotbugs и проводится обычный билд мавена.
Осталось самое сложное - подключить и запустить тесты постман при пулл реквесте (не зря же я их писала:) ) . Сложность оказалась в том, чтобы собрать докер-композ с 4мя сервисами, rabbitmq, постгрес и liquibase.
Сначала у меня не хотел запускаться liquibase, искала рабочий вариант со вчерашнего вечера. Утром получилось. Потом возникла проблема с Feign клиентом. У меня был захардкожен localhost в параметрах и не сразу получилось заменить на переменную.
Теперь я пытаюсь также побороть rabbitmq. У него также в параметрах конфигурации указан localhost, а в докере для общения между сервисами нужно, чтобы была указана ссылка на сервис, название контейнера, например. Ввести в конфигурацию переменную через конструкцию "${}" почему-то не выходит. Пробую другими путями.
Хочу попробовать с настройкой network в докер-композ, возможно получится. Это какая-то настройка общей сети для всех контейнеров, возможно поможет. Либо буду искать другие варианты.
Потом нужно будет заняться рефакторингом. В понедельник был смешной момент - один из моих методов (калькулятор дистанции между координатами) попал в презентацию лекции по анти-паттернам😅 Вот так вот и переводи сложные формулы с интернета на джава после этого 😁 Придётся теперь узнать, что считается в формуле, которая выдаёт у меня промежуточное значение "а" для вычисления дистанции, через переменную "с". 😂
P.S. Победа!! Сумела засунуть переменную в конфигурацию и переопределила ее в докер-композ! 🥳
Второй день "играю" в девопса. Пытаюсь настроить GitHub Actions. В принципе, у меня уже делается проверка по чекстайлу, плагину spotbugs и проводится обычный билд мавена.
Осталось самое сложное - подключить и запустить тесты постман при пулл реквесте (не зря же я их писала:) ) . Сложность оказалась в том, чтобы собрать докер-композ с 4мя сервисами, rabbitmq, постгрес и liquibase.
Сначала у меня не хотел запускаться liquibase, искала рабочий вариант со вчерашнего вечера. Утром получилось. Потом возникла проблема с Feign клиентом. У меня был захардкожен localhost в параметрах и не сразу получилось заменить на переменную.
Теперь я пытаюсь также побороть rabbitmq. У него также в параметрах конфигурации указан localhost, а в докере для общения между сервисами нужно, чтобы была указана ссылка на сервис, название контейнера, например. Ввести в конфигурацию переменную через конструкцию "${}" почему-то не выходит. Пробую другими путями.
Хочу попробовать с настройкой network в докер-композ, возможно получится. Это какая-то настройка общей сети для всех контейнеров, возможно поможет. Либо буду искать другие варианты.
Потом нужно будет заняться рефакторингом. В понедельник был смешной момент - один из моих методов (калькулятор дистанции между координатами) попал в презентацию лекции по анти-паттернам😅 Вот так вот и переводи сложные формулы с интернета на джава после этого 😁 Придётся теперь узнать, что считается в формуле, которая выдаёт у меня промежуточное значение "а" для вычисления дистанции, через переменную "с". 😂
P.S. Победа!! Сумела засунуть переменную в конфигурацию и переопределила ее в докер-композ! 🥳
🔥9😁1
Всем привет!
Задание на выходные на стажировке у нас было подключить Spring Security по OAuth2 стандарту.
Это такой принцип, при котором существует сервер-шлюз, который перехватывает все запросы, переадресовывает их на сервер аутентификации, который проверяет логин и пароль и, если всё хорошо, выдает токен. С этим токеном, сервер-шлюз перенаправляет запросы на серверы-ресурсы, где хранятся данные пользователей.
Эту тему я ещё изучаю, поэтому не полностью сложилась картина, как это всё работает. Но после последнего задания, стало чуть понятнее.
До этого я как-то с сокурсником обсуждала, как отсеиваются запросы, поступающие напрямую к серверам-ресурсам. Мы подумали, что если ввести адрес напрямую (указать правильный адрес и порт), можно получить доступ к информации без аутентификации.
Такой пример я действительно видела в одном туториале от индуса на ютюбе. Пока он тестировал, он случайно ввёл не тот порт и попал на сервер с ресурсами без какого-либо пароля.
Нам на стажировке дали примерный код для подключения двух дополнительных модулей и, когда у меня уже всё получилось, я убедилась, что напрямую никакого доступа не будет к защищенной информации при правильной настройке.
Нам дали пример с упрощением и я сначала амбициозно подумала, что смогу убрать упрощение и настроить с не заданным пользователем. Когда встретились первые сложности, я ненадолго отложила эту идею до того, как получится по-простому.
Даже с похожим кодом из образца настройка далась не сразу. Но думаю, что обязательно в своем проекте подключу как нужно опираясь на книгу по Security. Временно не получалось ее читать, так и осталось мне 3-4 главы. Но надеюсь скоро всё наладится)
Задание на выходные на стажировке у нас было подключить Spring Security по OAuth2 стандарту.
Это такой принцип, при котором существует сервер-шлюз, который перехватывает все запросы, переадресовывает их на сервер аутентификации, который проверяет логин и пароль и, если всё хорошо, выдает токен. С этим токеном, сервер-шлюз перенаправляет запросы на серверы-ресурсы, где хранятся данные пользователей.
Эту тему я ещё изучаю, поэтому не полностью сложилась картина, как это всё работает. Но после последнего задания, стало чуть понятнее.
До этого я как-то с сокурсником обсуждала, как отсеиваются запросы, поступающие напрямую к серверам-ресурсам. Мы подумали, что если ввести адрес напрямую (указать правильный адрес и порт), можно получить доступ к информации без аутентификации.
Такой пример я действительно видела в одном туториале от индуса на ютюбе. Пока он тестировал, он случайно ввёл не тот порт и попал на сервер с ресурсами без какого-либо пароля.
Нам на стажировке дали примерный код для подключения двух дополнительных модулей и, когда у меня уже всё получилось, я убедилась, что напрямую никакого доступа не будет к защищенной информации при правильной настройке.
Нам дали пример с упрощением и я сначала амбициозно подумала, что смогу убрать упрощение и настроить с не заданным пользователем. Когда встретились первые сложности, я ненадолго отложила эту идею до того, как получится по-простому.
Даже с похожим кодом из образца настройка далась не сразу. Но думаю, что обязательно в своем проекте подключу как нужно опираясь на книгу по Security. Временно не получалось ее читать, так и осталось мне 3-4 главы. Но надеюсь скоро всё наладится)
👍6👏4
Всем привет!
У меня подходит к концу стажировка, вчера было последнее занятие, 7го ноября экзамен и итоговое собеседование будет 13 ноября.
Были интересные сложные задания, в итоге получился большой многомодульный проект, относительно моих предыдущих. Но, конечно, не сравнить с реальными проектами. В нем есть, что дорабатывать, но думается мне поработать над своим клоном курсеры.
Начала не очень давно смотреть курс по микросервисам от Amigoscode, у кого хорошо с английским - советую. Этот курс помог мне с настройкой Feign клиента, RabbitMQ. Дальше по курсу будет переход на кафка и, если не ошибаюсь, kubernetes.
Кстати, немного посмотрела ознакомительное видео на тему kubernetes, увидела что это мощный инструмент, в котором можно сделать так, чтобы было много копий нашего приложения, как бы в изолированных контейнерах. Можно настроить, чтобы в случае, если наше приложение (или база данных) упадет, автоматически запустилась его (ее) копия.
У меня подходит к концу стажировка, вчера было последнее занятие, 7го ноября экзамен и итоговое собеседование будет 13 ноября.
Были интересные сложные задания, в итоге получился большой многомодульный проект, относительно моих предыдущих. Но, конечно, не сравнить с реальными проектами. В нем есть, что дорабатывать, но думается мне поработать над своим клоном курсеры.
Начала не очень давно смотреть курс по микросервисам от Amigoscode, у кого хорошо с английским - советую. Этот курс помог мне с настройкой Feign клиента, RabbitMQ. Дальше по курсу будет переход на кафка и, если не ошибаюсь, kubernetes.
Кстати, немного посмотрела ознакомительное видео на тему kubernetes, увидела что это мощный инструмент, в котором можно сделать так, чтобы было много копий нашего приложения, как бы в изолированных контейнерах. Можно настроить, чтобы в случае, если наше приложение (или база данных) упадет, автоматически запустилась его (ее) копия.
👍8🔥5
Всем привет!
Вчера у меня проходил экзамен на стажировке. Точнее, он начался 7го числа вечером. Нам дали большое задание со сроком выполнения в 24 часа. Нужно было на основе проекта, который мы писали этот месяц, сделать чуть другой проект за сутки.
Одно из первых исправлений было заменить тип идентификатора для главной сущности проекта. Это, естественно, вызвало много исправлений во многих дто, контроллерах, сервисах.
Тут у меня случилось дежавю. Где-то в феврале, когда мы писали 3е ТЗ в Яндекс.Практикуме, моя ревьюер прислала мне после первой проверки задания сообщение в стиле "всё переделать!" У меня было больше 20 замечаний, а проект был, надо сказать, чуть больше калькулятора.
Когда я начала всё тогда исправлять у меня задергался глаз, потому что все классы были подчеркнуты красным, было больше 50 выделенных проблем в Идее и я серьёзно думала, что не пройду дальше того задания.
После тех исправлений мне ревьюер каждый раз присылала замечания и так я привыкла к исправлениям, поэтому в этот раз красные подчеркивания меня не демотивировали. По ходу работы сделала бэкапы с мыслью потом сделать squash коммитов в один, но в итоге, оставила их, на всякий случай, теперь в истории красуются "backup перед security", "плюс 1 backup перед security" и, наконец, "final backup перед security".😁 Но security все-таки пришла в проект, как ее backup не спугивал))
P. S. Давно планирую сделать посты про CORS, CSRF, OAuth2, надеюсь скоро начну потихоньку исполнять задуманное, т.к. планирую это сделать ещё с лета)
P. P. S. Результатов экзамена пока нет)
Вчера у меня проходил экзамен на стажировке. Точнее, он начался 7го числа вечером. Нам дали большое задание со сроком выполнения в 24 часа. Нужно было на основе проекта, который мы писали этот месяц, сделать чуть другой проект за сутки.
Одно из первых исправлений было заменить тип идентификатора для главной сущности проекта. Это, естественно, вызвало много исправлений во многих дто, контроллерах, сервисах.
Тут у меня случилось дежавю. Где-то в феврале, когда мы писали 3е ТЗ в Яндекс.Практикуме, моя ревьюер прислала мне после первой проверки задания сообщение в стиле "всё переделать!" У меня было больше 20 замечаний, а проект был, надо сказать, чуть больше калькулятора.
Когда я начала всё тогда исправлять у меня задергался глаз, потому что все классы были подчеркнуты красным, было больше 50 выделенных проблем в Идее и я серьёзно думала, что не пройду дальше того задания.
После тех исправлений мне ревьюер каждый раз присылала замечания и так я привыкла к исправлениям, поэтому в этот раз красные подчеркивания меня не демотивировали. По ходу работы сделала бэкапы с мыслью потом сделать squash коммитов в один, но в итоге, оставила их, на всякий случай, теперь в истории красуются "backup перед security", "плюс 1 backup перед security" и, наконец, "final backup перед security".😁 Но security все-таки пришла в проект, как ее backup не спугивал))
P. S. Давно планирую сделать посты про CORS, CSRF, OAuth2, надеюсь скоро начну потихоньку исполнять задуманное, т.к. планирую это сделать ещё с лета)
P. P. S. Результатов экзамена пока нет)
❤7👍5🔥2
Всем привет!
Сегодня хочу продолжить своювоображаемую серию постов о Spring Security. Недавно я написала пост, в котором показала, как может выглядеть примерная (и простая) настройка безопасности, с помощью Spring Security.
Когда я первый раз увидела такую настройку, мои первые вопросы были, что такое “csrf().disable()” и что такое “cors().disable()”? Начнем с cors.
Всех больше мне нравится определение из этой статьи:
CORS (Cross-Origin Resource Sharing, англ. «совместное использование ресурсов разных источников») — это стандарт, позволяющий предоставлять веб-страницам доступ к объектам сторонних интернет-ресурсов.
Сторонним считается любой интернет-ресурс, который отличается от запрашиваемого протоколом, доменом или портом.
Например, у нас есть gateway – сервер, принимающий все входящие запросы и переадресовывающий их на разные микросервисы. У этого gateway есть список доверенных источников — порты или адреса, которым разрешен доступ.
Если у нас будут прописаны настройки cors — мы укажем либо аннотациями @CrossOrigin, либо настроем бин CorsWebFilter, — тогда эта информация будет доступна браузеру в заголовках, будет указан HTTP метод и адреса-источники, откуда можно получать/запрашивать данные.
Если у нас не прописаны настройки cors, а в настройках Spring Security не будет указано cors().disable(), то любой запрос с условного localhost:8080 к localhost:9000 будет заблокирован браузером.
Таким образом, настройка “cors().disable()” используется в основном в учебных целях, чтобы не возиться с ошибками доступа, а сфокусироваться на каком-то другом моменте. (я пишу в основном, потому что возможно где-то на рабочих проектах проверку cors тоже отключают, но мне кажется это редкость, хотя я не знаю наверняка).
Сегодня хочу продолжить свою
Когда я первый раз увидела такую настройку, мои первые вопросы были, что такое “csrf().disable()” и что такое “cors().disable()”? Начнем с cors.
Всех больше мне нравится определение из этой статьи:
CORS (Cross-Origin Resource Sharing, англ. «совместное использование ресурсов разных источников») — это стандарт, позволяющий предоставлять веб-страницам доступ к объектам сторонних интернет-ресурсов.
Сторонним считается любой интернет-ресурс, который отличается от запрашиваемого протоколом, доменом или портом.
Например, у нас есть gateway – сервер, принимающий все входящие запросы и переадресовывающий их на разные микросервисы. У этого gateway есть список доверенных источников — порты или адреса, которым разрешен доступ.
Если у нас будут прописаны настройки cors — мы укажем либо аннотациями @CrossOrigin, либо настроем бин CorsWebFilter, — тогда эта информация будет доступна браузеру в заголовках, будет указан HTTP метод и адреса-источники, откуда можно получать/запрашивать данные.
Если у нас не прописаны настройки cors, а в настройках Spring Security не будет указано cors().disable(), то любой запрос с условного localhost:8080 к localhost:9000 будет заблокирован браузером.
Таким образом, настройка “cors().disable()” используется в основном в учебных целях, чтобы не возиться с ошибками доступа, а сфокусироваться на каком-то другом моменте. (я пишу в основном, потому что возможно где-то на рабочих проектах проверку cors тоже отключают, но мне кажется это редкость, хотя я не знаю наверняка).
👍9
Всем привет!
Эта неделя выдалась свободной, всякие ожидания, много свободного времени было. В общем, пошла в интернет, не знаю как, но очутилась на курсе про линукс на степике 😂
Захотелось потренировать навыки работы в терминале. Что-то прошли, всё с нуля, всё просто. Почитала, посмотрела, поделала упражнения, вспомнила, что у меня в избранных лежит непросмотренная видео-серия лекций из Кембриджского университета по терминалу, гит и другим интересным вещам. Первая лекция про терминал и 6-я про гит особенно понравились (остальные ещё не досмотрела). Лекции на английском, но возможно, если поискать, можно найти с переводом.
В начале недели ещё смотрела курс от Amigoscode по микросервисам. Я где-то на середине курса и стало уже немного раздражать, что в курсе, например, 106 видео, но часто эти видео по 2-5 минут. Кажется, что объединил бы в два полных нормальных видео, было бы удобнее. Но что есть, то есть.
В этом курсе, он показывает, как подключить Eureka сервер. У меня есть один пет-проект, туда как раз хочу подключить Eureka, но посмотрела на него (проект) свежим взглядом после стажировки, и что-то так много сделано неправильно, переделать надо бы, что даже подумалось, что с нуля написать будет быстрее 😅 Но попробую переделать в отдельной ветке.
Эта неделя выдалась свободной, всякие ожидания, много свободного времени было. В общем, пошла в интернет, не знаю как, но очутилась на курсе про линукс на степике 😂
Захотелось потренировать навыки работы в терминале. Что-то прошли, всё с нуля, всё просто. Почитала, посмотрела, поделала упражнения, вспомнила, что у меня в избранных лежит непросмотренная видео-серия лекций из Кембриджского университета по терминалу, гит и другим интересным вещам. Первая лекция про терминал и 6-я про гит особенно понравились (остальные ещё не досмотрела). Лекции на английском, но возможно, если поискать, можно найти с переводом.
В начале недели ещё смотрела курс от Amigoscode по микросервисам. Я где-то на середине курса и стало уже немного раздражать, что в курсе, например, 106 видео, но часто эти видео по 2-5 минут. Кажется, что объединил бы в два полных нормальных видео, было бы удобнее. Но что есть, то есть.
В этом курсе, он показывает, как подключить Eureka сервер. У меня есть один пет-проект, туда как раз хочу подключить Eureka, но посмотрела на него (проект) свежим взглядом после стажировки, и что-то так много сделано неправильно, переделать надо бы, что даже подумалось, что с нуля написать будет быстрее 😅 Но попробую переделать в отдельной ветке.
👍9🔥3
Всем привет!
Сегодня расскажу последние новости. Пока я проходила стажировку, мне поступило предложение о работе в другой компании. Я прошла туда собеседование, выполнила тестовое задание и продолжала выполнять задания со стажировки.
Так вышло, что в последний день стажировки нам сказали, что до конца месяца они не будут принимать решение, либо решение принято, но по другим причинам не будет сказано раньше. А на следующий день мне пришел хороший оффер в другую компанию.
Я его приняла и у меня был первый рабочий день в прошлый четверг. Сначала я побоялась об этом написать, потому что вдруг меня уволят в первый же день. 😂 Но ничего такого не произошло, тут хороший онбординг процесс, я уже начинаю верить, что всё происходит в реальности и мне не приснилось. 😅
В связи с этими своими мыслями, вспомнила историю одного сеньёра об одном своем помощнике - джуне, который только через месяц работы немного успокоился и перестал бояться, что его уволят не сегодня / завтра. 😁
Сегодня расскажу последние новости. Пока я проходила стажировку, мне поступило предложение о работе в другой компании. Я прошла туда собеседование, выполнила тестовое задание и продолжала выполнять задания со стажировки.
Так вышло, что в последний день стажировки нам сказали, что до конца месяца они не будут принимать решение, либо решение принято, но по другим причинам не будет сказано раньше. А на следующий день мне пришел хороший оффер в другую компанию.
Я его приняла и у меня был первый рабочий день в прошлый четверг. Сначала я побоялась об этом написать, потому что вдруг меня уволят в первый же день. 😂 Но ничего такого не произошло, тут хороший онбординг процесс, я уже начинаю верить, что всё происходит в реальности и мне не приснилось. 😅
В связи с этими своими мыслями, вспомнила историю одного сеньёра об одном своем помощнике - джуне, который только через месяц работы немного успокоился и перестал бояться, что его уволят не сегодня / завтра. 😁
🔥17❤1
Всем привет!
Подумала, что не рассказала еще здесь о своем небольшом приключении на выходных. Началось все с того, что в первый свой рабочий день, у меня на компьютере вылез «экран-смерти». Самое время, подумала я, умереть компьютеру. (Рабочий мне еще не пришел)
Сначала запустила по гайду из интернета команду, сканирующую и восстанавливающую поврежденные файлы системы. Думала, может поможет. Но в субботу снова он — синий экран с грустным смайлом и сообщением, что пора тебе покупать новый компьютер.
Решила попробовать откатить состояние к заводским настройкам, без удаления личных данных. Но на всякий случай сделала бэкап. В воскресенье запустила процесс. Посмотрела на список удаленных программ, вспомнила, что надо заново же и базу данных теперь устанавливать, да git, да докер. Немного было пала духом, но решила постепенно восстановить. Большую часть программ решила не устанавливать. Всякие Dbeaver и Insomnia, которые устанавливали во время курса в практикуме.
В общем, восстановление прошло пока в основном безболезненно. Данные не потеряла. По причине «экрана» думаю на докер, что когда устанавливала его весной, сделала не всё правильно. Тут когда на стажировке запускала в нем 7 образов одновременно, через докер-композ, он часто зависал, отказывался работать, запускаться, закрываться. В этот раз, когда устанавливала, сделала более внимательно по документации. Надеюсь, что все будет работать нормально. Завтра-послезавтра потестирую его как следует :)
Подумала, что не рассказала еще здесь о своем небольшом приключении на выходных. Началось все с того, что в первый свой рабочий день, у меня на компьютере вылез «экран-смерти». Самое время, подумала я, умереть компьютеру. (Рабочий мне еще не пришел)
Сначала запустила по гайду из интернета команду, сканирующую и восстанавливающую поврежденные файлы системы. Думала, может поможет. Но в субботу снова он — синий экран с грустным смайлом и сообщением, что пора тебе покупать новый компьютер.
Решила попробовать откатить состояние к заводским настройкам, без удаления личных данных. Но на всякий случай сделала бэкап. В воскресенье запустила процесс. Посмотрела на список удаленных программ, вспомнила, что надо заново же и базу данных теперь устанавливать, да git, да докер. Немного было пала духом, но решила постепенно восстановить. Большую часть программ решила не устанавливать. Всякие Dbeaver и Insomnia, которые устанавливали во время курса в практикуме.
В общем, восстановление прошло пока в основном безболезненно. Данные не потеряла. По причине «экрана» думаю на докер, что когда устанавливала его весной, сделала не всё правильно. Тут когда на стажировке запускала в нем 7 образов одновременно, через докер-композ, он часто зависал, отказывался работать, запускаться, закрываться. В этот раз, когда устанавливала, сделала более внимательно по документации. Надеюсь, что все будет работать нормально. Завтра-послезавтра потестирую его как следует :)
👍10
Всем привет!
В среду посмотрела интересный митап. Особенно понравился второй доклад на тему «Приложение от проекта до релиза: этапы реализации».
Всего было три доклада, но, честно говоря, мне не хватает пока знаний для первого и третьего докладов. В первом было про BeanPostProcessor-ы, там очень хитрую инициализацию объектов докладчики провернули, что по ощущениям, в комментариях чата очень мало, кто понял как и зачем они это сделали. А в третьем докладе была тема «JMX (Java Management Extension) в 2023». Это протокол мониторинга и менеджмента для JVM (из описания).
Во втором докладе было про последовательность этапов разработки на старте проекта и про реализации новых фич, про архитектуру в целом. Очень бодрый доклад, интересная дискуссия после него. Рекомендую посмотреть, кому интересно.
В среду посмотрела интересный митап. Особенно понравился второй доклад на тему «Приложение от проекта до релиза: этапы реализации».
Всего было три доклада, но, честно говоря, мне не хватает пока знаний для первого и третьего докладов. В первом было про BeanPostProcessor-ы, там очень хитрую инициализацию объектов докладчики провернули, что по ощущениям, в комментариях чата очень мало, кто понял как и зачем они это сделали. А в третьем докладе была тема «JMX (Java Management Extension) в 2023». Это протокол мониторинга и менеджмента для JVM (из описания).
Во втором докладе было про последовательность этапов разработки на старте проекта и про реализации новых фич, про архитектуру в целом. Очень бодрый доклад, интересная дискуссия после него. Рекомендую посмотреть, кому интересно.
YouTube
Sber Java Meetup: Избегая техдолга
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
*«Да (не) инициализируйся ты уже!»*
Как легко разработать DSL для Spring? Правильно – никак! Михаил Сильванович, Максим Шестаков, Евгений Зубенко…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
*«Да (не) инициализируйся ты уже!»*
Как легко разработать DSL для Spring? Правильно – никак! Михаил Сильванович, Максим Шестаков, Евгений Зубенко…
🔥7👍1
Всем привет!
Вчера интересовалась дженериками. В одной статье на хабре в комментариях попалась ссылка на интересное видео по дженерикам. В нем доклад от 2016 года с конференции JPoint. Очень понравился, до этого не знала разницу между записями <? extends Number> от <? super Number>.
Докладчик рассказал, что однажды задал вопрос, что можно добавить в такой список:
А что можно добавить в такой список:
В обоих случаях, правильно ответили 15% людей, я до его объяснения также ответила неправильно. Мне казалось, что в первый список можно положить любой тип, который наследуется от Number, а во второй список - Object и Number.
А оказалось, что правильный ответ был, что в первый список безопасно можно положить только null, а во второй список можно положить любой тип, который наследуется от Number, но нельзя класть обычный Object.
Если кто-то как и я не знал этого, советую послушать объяснение почему в этом видео, докладчик отлично объясняет на понятных примерах.
После этого видео, стала смотреть другие видео на канале и узнала еще много интересного про Pageable, оказывается он бьет по перформансу, если его неправильно использовать.
Потом, на том же канале, мне попалось видео по компетенциям и грейдам IT-специалистов и меня порадовало, что из графы сеньера мне осталось только научиться работать с ExecutorService и дело, как говорится, в шляпе 😁
Вчера интересовалась дженериками. В одной статье на хабре в комментариях попалась ссылка на интересное видео по дженерикам. В нем доклад от 2016 года с конференции JPoint. Очень понравился, до этого не знала разницу между записями <? extends Number> от <? super Number>.
Докладчик рассказал, что однажды задал вопрос, что можно добавить в такой список:
List<? extends Number> numbers = new ArrayList<>();
А что можно добавить в такой список:
List<? super Number> numbers = new ArrayList<Object>();
В обоих случаях, правильно ответили 15% людей, я до его объяснения также ответила неправильно. Мне казалось, что в первый список можно положить любой тип, который наследуется от Number, а во второй список - Object и Number.
А оказалось, что правильный ответ был, что в первый список безопасно можно положить только null, а во второй список можно положить любой тип, который наследуется от Number, но нельзя класть обычный Object.
Если кто-то как и я не знал этого, советую послушать объяснение почему в этом видео, докладчик отлично объясняет на понятных примерах.
После этого видео, стала смотреть другие видео на канале и узнала еще много интересного про Pageable, оказывается он бьет по перформансу, если его неправильно использовать.
Потом, на том же канале, мне попалось видео по компетенциям и грейдам IT-специалистов и меня порадовало, что из графы сеньера мне осталось только научиться работать с ExecutorService и дело, как говорится, в шляпе 😁
🔥11
Всем привет!
На днях занималась подключением Liquibase в одном из своих проектов и запуском ее с базой данных в docker-compose. Снова, как и в первый раз на стажировке, у меня возникли сложности с этим. Информации в интернете не так и много на эту тему (мне мало попадалось). Поэтому я решила написать здесь небольшой гайд на эту тему.
Дисклеймер: Последний раз, когда подключала, узнала, что можно настроить Dockerfile для ликвибейз отдельно, в котором будут прописаны и команды, а в docker-compose уже запускать билд. Я пока не настраивала Dockerfile и все еще не знаю, как делать правильно — с ним или без него. Поэтому гайд не гайд, а орел.
Итак, гайд для многомодульного проекта, где ликвибейз подключается в отдельном модуле. Кратко о подключении: я делала в Maven, поэтому в pom.xml добавила необходимую зависимость для ликвибейз (liquibase-core), а также мавен-плагин (liquibase-maven-plugin), в котором прописала путь к файлу с настройками ликвибейз (тег propertyFile) и путь к главному файлу ченджлогов, в котором прописаны пути к мелким ченджлогам, (тег changeLogFile). После этого завела liquibase.properties, в котором также прописала путь к мастер ченджлогу (если все лежит по пути, который предлагается в документации по умолчанию, то там и будет происходить поиск мастер ченджлога).
Итак, docker-compose. Сначала настраиваем базу данных, ей обязательно добавляем healthcheck. Для постгрес я делала такой:
Далее добавляем ликвибейз и прописываем условие, после которого он начинает свою работу — наша база данных здорова и может принимать запросы:
Если docker-compose файл лежит в отдельной папке, то путь к файлу нужно начать с двух точек, чтобы подняться на папку вверх. Далее, после этой настройки, можно добавить в docker-compose наш микросервис, добавив условие для запуска — ликвибейз успешно завершила работу:
P.S.: чтобы все остальные ченджлоги были найдены ликвибейз, необходимо в мастер файле добавить условие relativeToChangelogFile: true в yaml, либо relativeToChangelogFile="true" в xml формате.
На днях занималась подключением Liquibase в одном из своих проектов и запуском ее с базой данных в docker-compose. Снова, как и в первый раз на стажировке, у меня возникли сложности с этим. Информации в интернете не так и много на эту тему (мне мало попадалось). Поэтому я решила написать здесь небольшой гайд на эту тему.
Дисклеймер: Последний раз, когда подключала, узнала, что можно настроить Dockerfile для ликвибейз отдельно, в котором будут прописаны и команды, а в docker-compose уже запускать билд. Я пока не настраивала Dockerfile и все еще не знаю, как делать правильно — с ним или без него. Поэтому гайд не гайд, а орел.
Итак, гайд для многомодульного проекта, где ликвибейз подключается в отдельном модуле. Кратко о подключении: я делала в Maven, поэтому в pom.xml добавила необходимую зависимость для ликвибейз (liquibase-core), а также мавен-плагин (liquibase-maven-plugin), в котором прописала путь к файлу с настройками ликвибейз (тег propertyFile) и путь к главному файлу ченджлогов, в котором прописаны пути к мелким ченджлогам, (тег changeLogFile). После этого завела liquibase.properties, в котором также прописала путь к мастер ченджлогу (если все лежит по пути, который предлагается в документации по умолчанию, то там и будет происходить поиск мастер ченджлога).
Итак, docker-compose. Сначала настраиваем базу данных, ей обязательно добавляем healthcheck. Для постгрес я делала такой:
healthcheck:
test: ["CMD-SHELL", "pg_isready -U названиеБД"]
interval: 10s
timeout: 5s
retries: 3
Далее добавляем ликвибейз и прописываем условие, после которого он начинает свою работу — наша база данных здорова и может принимать запросы:
liquibase:
image: liquibase/liquibase:4.19.1 #(есть и более новые версии)
container_name: liquibase
depends_on:
db: #(наименование сервиса БД из docker-compose)
condition: service_healthy
command:
- --url=jdbc:postgresql://db:5432/названиеБД?user=имяПользователя&password=пароль
- --changeLogFile=master.xml # master.yaml, расширение не влияет
- update
volumes:
# если мастер ченджлог лежит отдельно, то делаются две папки volumes, если мастер лежит в одной папке с остальными ченджлогами, то достаточно скопировать одну папку, где все лежит, иначе мастер файл задублируется и ликвибейз упадет с ошибкой.
- ./модуль с ликвибейз/src/main/resources/db/master.xml:/liquibase/master.xml
- ./модуль с ликвибейз/src/main/resources/db/changelog:/liquibase/changelog
Если docker-compose файл лежит в отдельной папке, то путь к файлу нужно начать с двух точек, чтобы подняться на папку вверх. Далее, после этой настройки, можно добавить в docker-compose наш микросервис, добавив условие для запуска — ликвибейз успешно завершила работу:
depends_on:
liquibase:
condition: service_completed_successfully
P.S.: чтобы все остальные ченджлоги были найдены ликвибейз, необходимо в мастер файле добавить условие relativeToChangelogFile: true в yaml, либо relativeToChangelogFile="true" в xml формате.
👍8❤1
Всем привет!
Сегодня знаменательный день в моём календаре - у меня сегодня день рождения 🥳
Я бы сказала, что мне исполнилось 18 лет, но в самом первом посте уже проспойлерила, что мне "после 30-ти"😅
Интересно, что первый спринт в Яндекс.Практикуме начался у меня тоже 5 декабря, в день рождения, год назад. Очень здорово, что в этот день рождения я уже получаю поздравления от коллег в новой профессии.
Также, спасибо всем вам, что подписались, поддерживаете реакциями и/или комментариями, это очень мотивирует! Если мне удается кого-то из вас также мотивировать, то это большая радость для меня 🤗
Сегодня знаменательный день в моём календаре - у меня сегодня день рождения 🥳
Я бы сказала, что мне исполнилось 18 лет, но в самом первом посте уже проспойлерила, что мне "после 30-ти"😅
Интересно, что первый спринт в Яндекс.Практикуме начался у меня тоже 5 декабря, в день рождения, год назад. Очень здорово, что в этот день рождения я уже получаю поздравления от коллег в новой профессии.
Также, спасибо всем вам, что подписались, поддерживаете реакциями и/или комментариями, это очень мотивирует! Если мне удается кого-то из вас также мотивировать, то это большая радость для меня 🤗
🎉17❤3🔥2👏1
Всем привет!
Не очень давно я писала про динамические запросы с помощью Spring Data JPA. В выходные мне попалось видео с докладом на эту тему. Там докладчики убеждали, что этот метод составления запросов является антипаттерном. Они сказали, что базы от Oracle не оптимизируют такие запросы, PostgreSQL немного лучше с ними справляется, но в принципе тоже не очень рекомендуется делать такие запросы.
Планировала разобраться в этой теме на этой неделе и поискать правда это или нет. Но к сожалению, не очень получилось этого сделать. Нашла, что действительно часто люди используют другие методы для таких запросов. На стажировке нам тоже говорили, что используют MyBatis для динамических запросов.
Докладчики предложили сделать кодогенерацию, где фразы “or :parameter is null” заменять на «1 = 1» либо «1 != 1» для случаев, когда parameter равен null или нет, соответственно. Но большого энтузиазма не вызвало их предложение у зрителей.
Такие дела. А я пока занялась активным изучением Kafka Streams, потому что они мне очень скоро понадобятся.
Не очень давно я писала про динамические запросы с помощью Spring Data JPA. В выходные мне попалось видео с докладом на эту тему. Там докладчики убеждали, что этот метод составления запросов является антипаттерном. Они сказали, что базы от Oracle не оптимизируют такие запросы, PostgreSQL немного лучше с ними справляется, но в принципе тоже не очень рекомендуется делать такие запросы.
Планировала разобраться в этой теме на этой неделе и поискать правда это или нет. Но к сожалению, не очень получилось этого сделать. Нашла, что действительно часто люди используют другие методы для таких запросов. На стажировке нам тоже говорили, что используют MyBatis для динамических запросов.
Докладчики предложили сделать кодогенерацию, где фразы “or :parameter is null” заменять на «1 = 1» либо «1 != 1» для случаев, когда parameter равен null или нет, соответственно. Но большого энтузиазма не вызвало их предложение у зрителей.
Такие дела. А я пока занялась активным изучением Kafka Streams, потому что они мне очень скоро понадобятся.
🔥8👍2
Всем привет!
Последние несколько дней борюсь с синдромом самозванца :) Чувствую себя пока самым бесполезным членом команды🙃
Сначала как-то просто приуныла, глядя на схему коммерческого проекта, с мыслью "разве я смогу в нем разобраться?"
Все выходные провела изучая новые для меня Kafka Streams и читая код. Примеры в туториалах, конечно, выглядят не сложно, в теории тоже звучит классно. Но, наверное, пока не напишу несколько рабочих вариантов сама, не придёт уверенность.
Вообще, интересная вещь получилась. В прошлом году, после пары udemy курсов по си шарпу, я была уверена, что могу спокойно стать джуном шарпистом. С течением курса в Практикуме, хотелось постоянно дополнять знания, казалось, что всего этого не достаточно мне, чтобы разбираться.
И сейчас на работе мне начинает казаться, что все вокруг больше меня знают, а я так мало. В общем, я понимаю, что всё начнёт улучшаться с первыми успешно-выполненными задачами, а пока стараюсь не падать духом и продолжать учиться 👩💻
Последние несколько дней борюсь с синдромом самозванца :) Чувствую себя пока самым бесполезным членом команды🙃
Сначала как-то просто приуныла, глядя на схему коммерческого проекта, с мыслью "разве я смогу в нем разобраться?"
Все выходные провела изучая новые для меня Kafka Streams и читая код. Примеры в туториалах, конечно, выглядят не сложно, в теории тоже звучит классно. Но, наверное, пока не напишу несколько рабочих вариантов сама, не придёт уверенность.
Вообще, интересная вещь получилась. В прошлом году, после пары udemy курсов по си шарпу, я была уверена, что могу спокойно стать джуном шарпистом. С течением курса в Практикуме, хотелось постоянно дополнять знания, казалось, что всего этого не достаточно мне, чтобы разбираться.
И сейчас на работе мне начинает казаться, что все вокруг больше меня знают, а я так мало. В общем, я понимаю, что всё начнёт улучшаться с первыми успешно-выполненными задачами, а пока стараюсь не падать духом и продолжать учиться 👩💻
🔥8❤2👏1👨💻1
Всем привет!
Сегодня у меня была внутренняя проверка теории на работе и я ее хорошо прошла. Некоторые вещи всё ещё нужно закрепить, но это положительный момент, потому что хорошо знать, где есть пробелы и их исправлять.
Ещё сегодня участвовала в поиске бага с более опытным коллегой. Очень понравился процесс, потому что было задействовано несколько микросервисов и не сразу была очевидна проблема и где именно она происходит.
Также начинает появляться свободное время и силы делать что-то дополнительное. Но пока не решила что. Хочется чего-то полезного.
Недавно пришла мысль, что мне хотелось бы иметь какую-то умную сортировку и поиск среди моих бесконечных браузерных закладок, потому что как что-то нужно, очень сложно что-то среди них найти, иной раз легче заново найти в гугле, либо в истории, чем в своих же папках с закладками😅
А то я обычно делала что-то для портфолио, а теперь можно и для себя что-то сделать 🤔
Сегодня у меня была внутренняя проверка теории на работе и я ее хорошо прошла. Некоторые вещи всё ещё нужно закрепить, но это положительный момент, потому что хорошо знать, где есть пробелы и их исправлять.
Ещё сегодня участвовала в поиске бага с более опытным коллегой. Очень понравился процесс, потому что было задействовано несколько микросервисов и не сразу была очевидна проблема и где именно она происходит.
Также начинает появляться свободное время и силы делать что-то дополнительное. Но пока не решила что. Хочется чего-то полезного.
Недавно пришла мысль, что мне хотелось бы иметь какую-то умную сортировку и поиск среди моих бесконечных браузерных закладок, потому что как что-то нужно, очень сложно что-то среди них найти, иной раз легче заново найти в гугле, либо в истории, чем в своих же папках с закладками😅
А то я обычно делала что-то для портфолио, а теперь можно и для себя что-то сделать 🤔
🔥9❤3👏1
Всем привет!
По поводу мыслей из своего предыдущего поста, увидела, что есть разные решения - расширения в браузерах. Себе не установила, потому что хочу все-таки идти сложным путем. 😊 С одной стороны, потому что мне больше интересен сам процесс.
Но пока до реализации дело у меня не дошло, потому что в выходные занесло меня опять в интернет на разные бесплатные курсы, только в этот раз я набрала в поиске “advanced java” и вышла на несколько курсов на coursera. Один уже можно сказать прошла, но там он очень короткий, всего 4-5 видео лекции и два-три проверочных теста, всё посвящено сервлетам. Посмотрю потом, что в остальных.
Еще успела сделать телеграм-бота. Пока он у меня самый простецкий, умеет только повторять всё, что ему напишешь (моему сыну очень понравилось с ним «разговаривать» 😁). Думаю добавить в него действия, которые бы дергали API какого-нибудь искусственного интеллекта (аналога chatGPT). Хочу задействовать его для «категоризации», чтобы потом использовать это в своихзлостных целях сортировках.
Еще из новостей — сегодня мне доверили самостоятельно разобраться с багом и у меня получилось 💃
По поводу мыслей из своего предыдущего поста, увидела, что есть разные решения - расширения в браузерах. Себе не установила, потому что хочу все-таки идти сложным путем. 😊 С одной стороны, потому что мне больше интересен сам процесс.
Но пока до реализации дело у меня не дошло, потому что в выходные занесло меня опять в интернет на разные бесплатные курсы, только в этот раз я набрала в поиске “advanced java” и вышла на несколько курсов на coursera. Один уже можно сказать прошла, но там он очень короткий, всего 4-5 видео лекции и два-три проверочных теста, всё посвящено сервлетам. Посмотрю потом, что в остальных.
Еще успела сделать телеграм-бота. Пока он у меня самый простецкий, умеет только повторять всё, что ему напишешь (моему сыну очень понравилось с ним «разговаривать» 😁). Думаю добавить в него действия, которые бы дергали API какого-нибудь искусственного интеллекта (аналога chatGPT). Хочу задействовать его для «категоризации», чтобы потом использовать это в своих
Еще из новостей — сегодня мне доверили самостоятельно разобраться с багом и у меня получилось 💃
🔥15❤1
Всем привет!
На выходных начала заготавливать для своего телеграм-бота микросервис, к которому он будет обращаться для сохранения данных. Захотела использовать новый для себя Elasticsearch, который еще ни разу не подключала.
Нашла хорошую статью-гайд как подключить его к spring boot приложению. Делюсь ссылкой. Может кому-нибудь тоже будет интересно посмотреть и поэкспериментировать.
Еще в выходные попалась интересная статья про тенденции в IT-мире за последние 3 года, что хотят соискатели и работодатели.
На выходных начала заготавливать для своего телеграм-бота микросервис, к которому он будет обращаться для сохранения данных. Захотела использовать новый для себя Elasticsearch, который еще ни разу не подключала.
Нашла хорошую статью-гайд как подключить его к spring boot приложению. Делюсь ссылкой. Может кому-нибудь тоже будет интересно посмотреть и поэкспериментировать.
Еще в выходные попалась интересная статья про тенденции в IT-мире за последние 3 года, что хотят соискатели и работодатели.
Хабр
Используем Elasticsearch вместе со Spring Boot
Предисловие Всем привет! Это моя первая статья на Хабре, и в ней я хочу рассказать о том, как мы можем интегрировать Elasticsearch в наше приложение на Spring Boot. Этот проект предназначен для...
👍10
Всем привет!
Были тут небольшие сомнения можно ли написать в канале на такую-то или такую-то тему, интересно это будет кому-то или нет.
Встретила классную аналогию по OAuth2 еще пару месяцев назад и подумала, что было бы круто о ней написать в канале. Но мысли, что вдруг это мало кому интересно или полезно останавливали. Но сейчас решила, что буду писать о чем мне хочется, а если это кому-то пригодится, то круто, я буду рада.
Так что, сегодня буду писать перевод аналогии о том, что такое OAuth2 и приложу перевод схемки из книги Spring Security in Action (Laurentiu Spilca), в которой мне осталось совсем немного до конца книги.
Итак, перевод аналогии что такое OAuth2:
Иногда я покупаю книжки в небольшом магазине. Мне приходится заказывать книги заранее, а потом забирать через пару дней. Но магазин от меня достаточно далеко, поэтому я прошу друга, который живет неподалеку, забрать мои книги. Когда мой друг спрашивает о моем заказе, продавец звонит мне, чтобы подтвердить, что я попросил кого-то забрать мои книги. После моего подтверждения, продавец отдает мои книги моему другу, а он передает их мне позже при встрече.
В этой аналогии, книги - это ресурсы. Я их владелец, поэтому я - Пользователь. Мой друг, который забирает мои ресурсы - это Клиент. Продавец в магазине - это сервер авторизации. Конечно, так как у нас нет токена в аналогии, она неполная.
(всё, теперь могу продолжать читать эту книжку со спокойной душой :))
Были тут небольшие сомнения можно ли написать в канале на такую-то или такую-то тему, интересно это будет кому-то или нет.
Встретила классную аналогию по OAuth2 еще пару месяцев назад и подумала, что было бы круто о ней написать в канале. Но мысли, что вдруг это мало кому интересно или полезно останавливали. Но сейчас решила, что буду писать о чем мне хочется, а если это кому-то пригодится, то круто, я буду рада.
Так что, сегодня буду писать перевод аналогии о том, что такое OAuth2 и приложу перевод схемки из книги Spring Security in Action (Laurentiu Spilca), в которой мне осталось совсем немного до конца книги.
Итак, перевод аналогии что такое OAuth2:
Иногда я покупаю книжки в небольшом магазине. Мне приходится заказывать книги заранее, а потом забирать через пару дней. Но магазин от меня достаточно далеко, поэтому я прошу друга, который живет неподалеку, забрать мои книги. Когда мой друг спрашивает о моем заказе, продавец звонит мне, чтобы подтвердить, что я попросил кого-то забрать мои книги. После моего подтверждения, продавец отдает мои книги моему другу, а он передает их мне позже при встрече.
В этой аналогии, книги - это ресурсы. Я их владелец, поэтому я - Пользователь. Мой друг, который забирает мои ресурсы - это Клиент. Продавец в магазине - это сервер авторизации. Конечно, так как у нас нет токена в аналогии, она неполная.
(всё, теперь могу продолжать читать эту книжку со спокойной душой :))
🔥9👍4