Please open Telegram to view this post
VIEW IN TELEGRAM
😁24👍5❤2🔥1
🧪 JUnit 6 — уже почти
JUnit официально двигается дальше: версия 6 уже в RC3. Минимальная поддерживаемая Java теперь — 17, архитектура переосмыслена, и наконец-то все модули (Platform, Jupiter, Vintage) получили единый номер версии.
Но если честно — революции не случилось. Да, API заметно подчистили, выкинули старые модули вроде junit-platform-runner, добавили встроенную интеграцию с Java Flight Recorder и улучшили поддержку Kotlin (suspend-тесты теперь можно писать нативно).
Однако принципиально новых возможностей тестирования — почти нет. Это скорее эволюция и техдолг-чистка, чем что-то, что заставит переписать ваши тесты завтра.
🔗 Полные release notes
💬 Оставляйте ваше мнение в комменты
🐸 Библиотека джависта
#News
JUnit официально двигается дальше: версия 6 уже в RC3. Минимальная поддерживаемая Java теперь — 17, архитектура переосмыслена, и наконец-то все модули (Platform, Jupiter, Vintage) получили единый номер версии.
Но если честно — революции не случилось. Да, API заметно подчистили, выкинули старые модули вроде junit-platform-runner, добавили встроенную интеграцию с Java Flight Recorder и улучшили поддержку Kotlin (suspend-тесты теперь можно писать нативно).
Однако принципиально новых возможностей тестирования — почти нет. Это скорее эволюция и техдолг-чистка, чем что-то, что заставит переписать ваши тесты завтра.
#News
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥2🥱2
🤓 Пока Python стал π-thon, ты можешь стать Data Scientist'ом
В Proglib.academy стартует экспресс-курс «Математика для Data Science»: 10 живых вебинаров, практика на Python и спикеры из ВШЭ, Яндекс Практикума и Wildberries, которые всё разложат по полочкам.
В программе:
🔹 матан, линал, теория вероятностей;
🔹 3 практических проекта + викторина с розыгрышем TG Premium;
🔹 поддержка преподавателей и чат с единомышленниками;
🎁 Оплати курс до 19 октября — получи курс по базовой математике в подарок.
🗓️ Старт — 6 ноября
👉 Записаться на курс
В Proglib.academy стартует экспресс-курс «Математика для Data Science»: 10 живых вебинаров, практика на Python и спикеры из ВШЭ, Яндекс Практикума и Wildberries, которые всё разложат по полочкам.
В программе:
🔹 матан, линал, теория вероятностей;
🔹 3 практических проекта + викторина с розыгрышем TG Premium;
🔹 поддержка преподавателей и чат с единомышленниками;
🎁 Оплати курс до 19 октября — получи курс по базовой математике в подарок.
🗓️ Старт — 6 ноября
👉 Записаться на курс
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40👍7🔥2👏2💯1
🧐 Хочешь в Data Science, но не знаешь, с чего начать?
Пройди короткий тест по математике — бот покажет, насколько ты готов к переходу и что стоит подтянуть.
👉 Пройти тест
Пройди короткий тест по математике — бот покажет, насколько ты готов к переходу и что стоит подтянуть.
Всего пару минут — и ты поймёшь, куда двигаться дальше.
👉 Пройти тест
This media is not supported in your browser
VIEW IN TELEGRAM
🌐 Путешествие URL: что происходит, когда вы вводите адрес сайта
Каждый раз, когда вы набираете https://example.com в браузере — за кулисами запускается целая цепочка событий 👇
1️⃣ Разбор адреса
Браузер делит URL на части:
▪️ https — протокол
▪️ example.com — домен
▪️ /page — путь к ресурсу
2️⃣ Поиск IP
Если IP не сохранён в кеше, браузер спрашивает DNS-сервер: «Где живёт example.com?»
3️⃣ Установление соединения
Создаётся TCP-соединение с сервером по IP и порту (80 для HTTP, 443 для HTTPS).
4️⃣ Запрос ресурса
Браузер отправляет HTTP-запрос: GET /page HTTP/1.1
5️⃣ Ответ сервера
Сервер возвращает HTML, CSS, JS и статус-код (например, 200 OK или 404 Not Found).
6️⃣ Рендеринг страницы
Браузер обрабатывает HTML, применяет стили и выполняет JavaScript.
7️⃣ Шифрование
Если сайт работает по HTTPS, соединение шифруется через SSL/TLS.
8️⃣ Кеширование
Браузер сохраняет ресурсы, чтобы при следующем визите всё грузилось быстрее.
🐸 Библиотека джависта
#CoreJava
Каждый раз, когда вы набираете https://example.com в браузере — за кулисами запускается целая цепочка событий 👇
Браузер делит URL на части:
▪️ https — протокол
▪️ example.com — домен
▪️ /page — путь к ресурсу
Если IP не сохранён в кеше, браузер спрашивает DNS-сервер: «Где живёт example.com?»
Создаётся TCP-соединение с сервером по IP и порту (80 для HTTP, 443 для HTTPS).
Браузер отправляет HTTP-запрос: GET /page HTTP/1.1
Сервер возвращает HTML, CSS, JS и статус-код (например, 200 OK или 404 Not Found).
Браузер обрабатывает HTML, применяет стили и выполняет JavaScript.
Если сайт работает по HTTPS, соединение шифруется через SSL/TLS.
Браузер сохраняет ресурсы, чтобы при следующем визите всё грузилось быстрее.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥4
⚡️ Просто о сложном: как JIT делает код быстрее
Вы когда-нибудь задумывались, как JIT умеет так ловко оптимизировать код в реальном времени?
Сегодня разберём, какие именно суперспособности JIT даёт вашему коду.
🔹 Инлайнинг методов
Когда JIT обнаруживает, что какой-то метод выполняется слишком часто, он может инлайнить его. Это значит, что весь код метода не будет вызываться отдельно, а его инструкции будут вставляться прямо в место вызова.
Пример:
Стало:
🔹 Удаление мертвого кода
JIT всегда анализирует, выполняется ли тот или иной участок кода. Если метод или условие никогда не будет вызвано (например, условие, которое всегда ложно), JIT его удаляет.
🔹 Оптимизация циклов
Циклы — частая конструкция, и JIT всегда старается оптимизировать их выполнение. Например, если цикл выполняется много раз, JIT может переработать его для уменьшения количества операций.
🔹 Параллельная компиляция
Если ранее компиляция шла поэтапно, сейчас JIT может компилировать несколько частей программы одновременно. Это не только ускоряет работу компилятора, но и уменьшает задержки при запуске программы.
🔹 Использование final переменных
JIT предполагает, что final переменные не изменяются после инициализации. Это даёт компилятору возможность предсказать их значения и оптимизировать операции с ними.
🔹 Удаление лишних проверок
JIT понимает, какие проверки в коде избыточны. Например, если переменная была уже проверена на null, и это значение не изменяется, JIT может просто игнорировать повторные проверки.
🔹 Классификация горячих и холодных методов
JIT следит за тем, какие методы выполняются часто (горячие) и какие — нет (холодные). Он решает компилировать только те методы, которые чаще всего используются. Если горячий метод вдруг перестаёт быть горячим, JIT может освободить его от компиляции, освобождая ресурсы.
🔹 Слияние и удаление дубликатов
Если программа выполняет одинаковые операции несколько раз, JIT сливает их в одну или избавляется от дублирующихся вычислений.
Пример:
JIT может понять, что a + b одинаково для обеих операций, и просто использовать результат из первого вычисления во втором.
💬 Пишите в комменты, какие инструменты ещё разобрать.
🐸 Библиотека джависта
#CoreJava
Вы когда-нибудь задумывались, как JIT умеет так ловко оптимизировать код в реальном времени?
Сегодня разберём, какие именно суперспособности JIT даёт вашему коду.
🔹 Инлайнинг методов
Когда JIT обнаруживает, что какой-то метод выполняется слишком часто, он может инлайнить его. Это значит, что весь код метода не будет вызываться отдельно, а его инструкции будут вставляться прямо в место вызова.
Пример:
int sum(int a, int b) {
return a + b;
}
int result = sum(5, 10);
Стало:
int result = 5 + 10; // JIT инлайнит код метода sum
🔹 Удаление мертвого кода
JIT всегда анализирует, выполняется ли тот или иной участок кода. Если метод или условие никогда не будет вызвано (например, условие, которое всегда ложно), JIT его удаляет.
🔹 Оптимизация циклов
Циклы — частая конструкция, и JIT всегда старается оптимизировать их выполнение. Например, если цикл выполняется много раз, JIT может переработать его для уменьшения количества операций.
🔹 Параллельная компиляция
Если ранее компиляция шла поэтапно, сейчас JIT может компилировать несколько частей программы одновременно. Это не только ускоряет работу компилятора, но и уменьшает задержки при запуске программы.
🔹 Использование final переменных
JIT предполагает, что final переменные не изменяются после инициализации. Это даёт компилятору возможность предсказать их значения и оптимизировать операции с ними.
🔹 Удаление лишних проверок
JIT понимает, какие проверки в коде избыточны. Например, если переменная была уже проверена на null, и это значение не изменяется, JIT может просто игнорировать повторные проверки.
🔹 Классификация горячих и холодных методов
JIT следит за тем, какие методы выполняются часто (горячие) и какие — нет (холодные). Он решает компилировать только те методы, которые чаще всего используются. Если горячий метод вдруг перестаёт быть горячим, JIT может освободить его от компиляции, освобождая ресурсы.
🔹 Слияние и удаление дубликатов
Если программа выполняет одинаковые операции несколько раз, JIT сливает их в одну или избавляется от дублирующихся вычислений.
Пример:
int a = 5;
int b = 5;
int c = a + b;
int d = a + b; // Дублирование
JIT может понять, что a + b одинаково для обеих операций, и просто использовать результат из первого вычисления во втором.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥2
🚀 Java Roadmap 2025
В 2025 году Java продолжает развиваться, и вот на что стоит обратить внимание в учёбе. Роадмапа на картинке, ниже ключевые моменты.
1️⃣ Основы и ООП
Фокус на record классы (Java 16+), абстракция и полиформизм.
2️⃣ Коллекции и потоки
Основной тренд — использование Streams API (Java 8+) и неизменяемых коллекций (Java 9+).
3️⃣ Многозадачность
Project Loom и виртуальные потоки (Java 21) упростят многозадачность и повысит производительность.
4️⃣ Функциональное программирование
Расширение использования лямбда-выражений и функциональных интерфейсов.
5️⃣ Web и микросервисы
Активное использование Spring Boot, Spring Cloud, Swagger/OpenAPI для документации.
6️⃣ Тестирование и сборка
JUnit 5, Mockito, Testcontainers и инструменты сборки Maven и Gradle для автоматизации.
7️⃣ Базы данных и ORM
Знания JDBC, Hibernate, JPA для создания надежных и масштабируемых систем.
🐸 Библиотека джависта
#Enterprise
В 2025 году Java продолжает развиваться, и вот на что стоит обратить внимание в учёбе. Роадмапа на картинке, ниже ключевые моменты.
Фокус на record классы (Java 16+), абстракция и полиформизм.
Основной тренд — использование Streams API (Java 8+) и неизменяемых коллекций (Java 9+).
Project Loom и виртуальные потоки (Java 21) упростят многозадачность и повысит производительность.
Расширение использования лямбда-выражений и функциональных интерфейсов.
Активное использование Spring Boot, Spring Cloud, Swagger/OpenAPI для документации.
JUnit 5, Mockito, Testcontainers и инструменты сборки Maven и Gradle для автоматизации.
Знания JDBC, Hibernate, JPA для создания надежных и масштабируемых систем.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥5❤2🥱1
🎲 Мы не только учим, но и играем!
На экспресс-курсе «Математика для Data Science» — викторина с призом TG-Premium 🎁
Проверь знания, прокачай математику и забери приз.
‼️ Оплатишь до 19 октября — получишь базовый курс в подарок.
👉 Записаться на курс
На экспресс-курсе «Математика для Data Science» — викторина с призом TG-Premium 🎁
Проверь знания, прокачай математику и забери приз.
‼️ Оплатишь до 19 октября — получишь базовый курс в подарок.
👉 Записаться на курс
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18👍6🔥4💯4
🛡 Circuit Breaker & Resilience4j
В микросервисах падение одного сервиса может уронить всю систему — эффект «домино». Circuit Breaker помогает изолировать сбои и держать SLA под контролем.
📝 Промпт:
💡 Расширения:
— Настройте TimeLimiter для защиты от зависаний.
— Интегрируйте с Spring Cloud Gateway для глобальных политик.
— Добавьте Grafana dashboards для визуализации отказоустойчивости.
🐸 Библиотека джависта
#Enterprise
В микросервисах падение одного сервиса может уронить всю систему — эффект «домино». Circuit Breaker помогает изолировать сбои и держать SLA под контролем.
📝 Промпт:
Generate a Spring Boot 3 configuration with Resilience4j Circuit Breaker.
— Configure Circuit Breaker around external HTTP calls (e.g. RestTemplate/WebClient).
— Add Retry policy with exponential backoff.
— Add Rate Limiter and Bulkhead isolation (thread pool separation).
— Provide fallback methods (graceful degradation).
— Enable metrics collection with Micrometer and Prometheus.
— Expose actuator endpoints for circuit state monitoring.
— Add chaos testing scenario: simulate latency and failures.
— Настройте TimeLimiter для защиты от зависаний.
— Интегрируйте с Spring Cloud Gateway для глобальных политик.
— Добавьте Grafana dashboards для визуализации отказоустойчивости.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥1
Недавно мы анонсировали старт нового курса «Математика для Data Science».
В ближайшие дни выйдет серия постов о том, что ждёт вас на курсе, а пока познакомим вас с его экспертами.
Спикеры курса:
👤 Ксения Кондаурова
Преподаватель и автор курсов для бакалавриата Центрального Университета (Т-Банк), спикер и методист для Edutoria (Сбербанк). Ксения расскажет, как линейная алгебра применяется для построения предсказательных моделей, и научит проверять гипотезы для бизнеса с помощью статистики.
👤 Диана Миронидис
Преподаватель НИУ ВШЭ, автор и методист Яндекс Практикума. Самый экстравагантный преподаватель из всех, с кем вы учились, — убедитесь, что математика может быть нескучной. Диана погрузит в математический анализ, научит исследовать функции и находить параметры, при которых ошибка модели минимальна.
👤 Маргарита Бурова
Академический руководитель образовательных программ по аналитике и анализу данных, Wildberries & Russ. Проведёт квиз с розыгрышем годовой подписки TG Premium. Маргарита — эксперт в дата-сайенс, ИИ и математических методах анализа данных, фанат развития ИТ-образования.
Вместе с экспертами за 8 недель вы не просто получите знания, а познакомитесь с математикой заново.
🎁 Только при оплате до 19 октября курс «Базовая математика» в подарок!
👉 Записаться на курс
В ближайшие дни выйдет серия постов о том, что ждёт вас на курсе, а пока познакомим вас с его экспертами.
Спикеры курса:
👤 Ксения Кондаурова
Преподаватель и автор курсов для бакалавриата Центрального Университета (Т-Банк), спикер и методист для Edutoria (Сбербанк). Ксения расскажет, как линейная алгебра применяется для построения предсказательных моделей, и научит проверять гипотезы для бизнеса с помощью статистики.
👤 Диана Миронидис
Преподаватель НИУ ВШЭ, автор и методист Яндекс Практикума. Самый экстравагантный преподаватель из всех, с кем вы учились, — убедитесь, что математика может быть нескучной. Диана погрузит в математический анализ, научит исследовать функции и находить параметры, при которых ошибка модели минимальна.
👤 Маргарита Бурова
Академический руководитель образовательных программ по аналитике и анализу данных, Wildberries & Russ. Проведёт квиз с розыгрышем годовой подписки TG Premium. Маргарита — эксперт в дата-сайенс, ИИ и математических методах анализа данных, фанат развития ИТ-образования.
Вместе с экспертами за 8 недель вы не просто получите знания, а познакомитесь с математикой заново.
🎁 Только при оплате до 19 октября курс «Базовая математика» в подарок!
👉 Записаться на курс
👍3❤1😁1
Топ-3 статьи о Java и смежных технологиях за неделю по версии нашего канала.
Разбор Factory, Builder, Singleton и др. с практическими примерами. Главная мысль — паттерны нужны там, где реально упрощают код, а не ради “красоты”.
Из монолита выделяли чат-сервис. Год миграции, дублирование логики, проблемы с транзакциями — но результатом стал независимый модуль и гибкость для дальнейшей разработки.
Поддержка Java 17+, новый JsonMapper, null-safety, совместимость со Spring Boot 4. Jackson 2 уходит в прошлое — пора проверять зависимости.
#News
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2👏1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Проверим, как вы дружите с многопоточностью 👇
У вас есть метод
doWork()
, который выполняет тяжёлую операцию (например, чтение и обработку файла).📦 Задание:
Нужно запустить ровно 5 потоков, каждый из которых вызывает
doWork()
, и дождаться завершения всех перед продолжением выполнение основного потока.Разрешено использовать любые инструменты.
Ставьте → 🔥, если нравится формат. Если нет → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤2👍1
♾️ 17 формул, которые изменили мир
Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернетом, медициной, космосом и вашими финансами.
📎 Читать статью
А если после статьи захотите разобраться, как эта математика работает в Data Science — вот экспресс-курс, который всё расставит по полочкам:
«Математика для Data Science»
🎓 За 2 месяца поймёте, как работают алгоритмы ML под капотом.
🗓️ Старт — 6 ноября
👉 Записаться на курс
Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернетом, медициной, космосом и вашими финансами.
📎 Читать статью
А если после статьи захотите разобраться, как эта математика работает в Data Science — вот экспресс-курс, который всё расставит по полочкам:
«Математика для Data Science»
— практика и живые уроки
— разбор кода и проверка домашних
— поддержка в Telegram-чате
🎓 За 2 месяца поймёте, как работают алгоритмы ML под капотом.
🗓️ Старт — 6 ноября
👉 Записаться на курс
И снова воскресная рубрика. Делитесь как прошла рабочая неделя или как проходят ваши выходные.
А я сегодня утром наблюдал эту громадину. Рядом с ним даже автобус как игрушечный😅
Есть среди нас богатые белые люди, кто был на круизе?
Отправляйте фото в комментарии👇🏻
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
😍4❤1👍1👏1
⏰ Сегодня последний день!
🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок!
Успей попасть на экспресс-курс «Математика для Data Science» — 10 живых вебинаров, практика на Python, поддержка менторов и преподаватели из ВШЭ, Яндекс Практикума и Wildberries.
За 2 месяца разберёшься с тем, на чём держится Data Science:
🎓 Построишь математический фундамент и поймёшь, как работают алгоритмы ML под капотом.
👉 Записаться на курс
Старт — 6 ноября, не упусти бонус!🎁
🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок!
Успей попасть на экспресс-курс «Математика для Data Science» — 10 живых вебинаров, практика на Python, поддержка менторов и преподаватели из ВШЭ, Яндекс Практикума и Wildberries.
За 2 месяца разберёшься с тем, на чём держится Data Science:
• векторы, матрицы и регрессия;
• градиенты, оптимизация, вероятности и статистика;
• реальные задачи анализа данных;
🎓 Построишь математический фундамент и поймёшь, как работают алгоритмы ML под капотом.
👉 Записаться на курс
Старт — 6 ноября, не упусти бонус!🎁
Всё ещё запускаете проект мышкой? Тогда этот пост для вас.
На самом деле IDEA умеет стартовать, дебажить и останавливать приложение полностью без кликов мышью. После пары дней привычки вы забудете, где находится зелёная кнопка ▶️.
🔹 Что делает
— Позволяет запускать и останавливать проект, не касаясь мыши
— Работает с любыми конфигурациями: Application, Maven, Gradle, Spring Boot и др.
— Поддерживает горячий перезапуск (rerun) и мгновенный переход к дебагу
🔹 Зачем это нужно
— Ускоряет цикл “правка → запуск → проверка”
— Позволяет фокусироваться на коде, не отвлекаясь на интерфейс
— Особенно удобно при работе на ноутбуке или в tmux-подобном флоу
🔹 Как использовать
▶️ Shift + F10 — запустить последнюю конфигурацию
🐞 Shift + F9 — запустить в режиме отладки
⏹️ Ctrl + F2 — остановить выполнение
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥2
Многие недооценивают, насколько ArrayList может быть узким местом в производительности, особенно при работе с большими объёмами данных. Разберём, как оптимизировать его использование 👇
⚙️ Указывайте ёмкость при создании
По умолчанию:
List<String> list = new ArrayList<>();
ArrayList начинает с небольшой ёмкости (10 элементов) и каждый раз увеличивается в 1.5 раза, когда не хватает места. Это вызывает множество копирований массива, что замедляет работу при миллионах элементов.
List<String> list = new ArrayList<>(1_000_000);
Если вы знаете (или можете оценить) количество элементов заранее — выделите память сразу. Это уменьшает количество realocations и экономит до 30–40% времени при массовых вставках.
🧠 Очищайте, а не пересоздавайте
Многие делают так:
list = new ArrayList<>();
Это создаёт новый объект и выбрасывает старый в GC. При частых операциях — GC начинает тормозить систему.
list.clear();
Если список используется повторно, очистка быстрее и не требует новой аллокации памяти.
⚡️ Не используйте remove() в цикле
Удаление элементов в цикле вручную — частая и дорогая ошибка.
Плохо:
for (String s : list) {
if (s.startsWith("A")) list.remove(s);
}
❌ Такой код приведёт к ConcurrentModificationException.
Даже если использовать Iterator, это безопасно, но медленно — каждый вызов remove() сдвигает все последующие элементы (O(n) на удаление).
list.removeIf(s -> s.startsWith("A"));
Метод removeIf оптимизирован под внутренние операции и работает быстрее при массовом удалении.
* Кстати, у нас есть курс по Алгоритмам и структурам данных со скидкой.
Ставь → 🔥, если интересно почитать про внутреннюю реализацию стандартных методов коллекций.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥48👍8❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19💯9👍6
🔥 Как подключить Keycloak к Spring Boot проекту
Keycloak — это современный open-source Identity Provider от Red Hat, который часто используется в enterprise-проектах для SSO (Single Sign-On), OAuth2 и OpenID Connect. Ниже — пошаговая настройка интеграции Keycloak с Spring Boot 3 и Spring Security 6.
1️⃣ Зависимости
Проверьте, что в проекте есть или добавьте следующие зависимости:
— Spring Web
— Spring Security
— OAuth2 Resource Server
— OAuth2 Client
2️⃣ Разворачиваем Keycloak
Запустите Keycloak через Docker:
После запуска откройте http://localhost:8080, войдите под admin/admin и создайте realm, например demo-realm.
3️⃣ Настройка клиента в Keycloak
В разделе Clients → Create client укажите:
— Client ID: spring-client
— Client Protocol: openid-connect
— Root URL: http://localhost:8081
В разделе Settings:
— Установите Access Type → confidential
— Включите Standard Flow Enabled
— Укажите Redirect URI: http://localhost:8081/login/oauth2/code/keycloak
Сохраните и перейдите на вкладку Credentials — скопируйте Client Secret.
4️⃣ Настройка application.yml
5️⃣ Конфигурация безопасности
Настройте SecurityConfig.java:
🧠 Зачем это нужно:
Keycloak снимает с вас головную боль по хранению паролей, управлению ролями и сессиями. Он интегрируется с LDAP, AD, SAML и десятками внешних OAuth-провайдеров.
🐸 Библиотека джависта
#Enterprise
Keycloak — это современный open-source Identity Provider от Red Hat, который часто используется в enterprise-проектах для SSO (Single Sign-On), OAuth2 и OpenID Connect. Ниже — пошаговая настройка интеграции Keycloak с Spring Boot 3 и Spring Security 6.
Проверьте, что в проекте есть или добавьте следующие зависимости:
— Spring Web
— Spring Security
— OAuth2 Resource Server
— OAuth2 Client
Запустите Keycloak через Docker:
docker run -d \
-p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:25.0.2 start-dev
После запуска откройте http://localhost:8080, войдите под admin/admin и создайте realm, например demo-realm.
В разделе Clients → Create client укажите:
— Client ID: spring-client
— Client Protocol: openid-connect
— Root URL: http://localhost:8081
В разделе Settings:
— Установите Access Type → confidential
— Включите Standard Flow Enabled
— Укажите Redirect URI: http://localhost:8081/login/oauth2/code/keycloak
Сохраните и перейдите на вкладку Credentials — скопируйте Client Secret.
server:
port: 8081
spring:
security:
oauth2:
client:
registration:
keycloak:
client-id: spring-client
client-secret: YOUR_CLIENT_SECRET
scope: openid, profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider:
keycloak:
issuer-uri: http://localhost:8080/realms/demo-realm
Настройте SecurityConfig.java:
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/public").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(Customizer.withDefaults())
.logout(logout -> logout
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
);
return http.build();
}
}
🧠 Зачем это нужно:
Keycloak снимает с вас головную боль по хранению паролей, управлению ролями и сессиями. Он интегрируется с LDAP, AD, SAML и десятками внешних OAuth-провайдеров.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥1