Для чего служит Java KeyStore?
KeyStore и TrustStore – это хранилища криптографических публичных и приватных ключей и сертификатов. Обычно они представляются файлами формата .jks, .dks, .p12, и другими, в зависимости от типа хранилища.
Для манипуляций над файлами хранилищ в JDK поставляется специальная утилита – keytool. Отдельные ключи разных типов добавляются в хранилище под заданными именами (alias). Еще этот файл называют базой данных сертификатов. Этот файл обычно защищен паролем.
KeyStore и TrustStore устроены похоже, но служат разным целям. KeyStore хранит данные о нашем приложении, тогда как TrustStore – о других, которым мы доверяем.
По умолчанию не подключается никакой KeyStore. Подключить его можно параметрами javax.net.ssl.keyStore (расположение файла), javax.net.ssl.keyStoreType (тип) и javax.net.ssl.keyStorePassword (пароль). Добавочные можно загружать динамически, классом java.security.KeyStore.
По умолчанию в приложении подключен один TrustStore, файл jre/lib/security/cacerts. Переопределить его можно параметрами JVM javax.net.ssl.trustStore, javax.net.ssl.trustStorePassword и javax.net.ssl.trustStorePassword.
Типичный пример использования – подключить TrustStore с самоподписанным SSL сертификатом, чтобы приложение могло ходить на определенный сайт по протоколу HTTPS, не проваливая проверку безопасности. Либо же подключить KeyStore с подлинным SSL сертификатом, чтобы приложение само работало как HTTPS-сервер.
KeyStore и TrustStore – это хранилища криптографических публичных и приватных ключей и сертификатов. Обычно они представляются файлами формата .jks, .dks, .p12, и другими, в зависимости от типа хранилища.
Для манипуляций над файлами хранилищ в JDK поставляется специальная утилита – keytool. Отдельные ключи разных типов добавляются в хранилище под заданными именами (alias). Еще этот файл называют базой данных сертификатов. Этот файл обычно защищен паролем.
KeyStore и TrustStore устроены похоже, но служат разным целям. KeyStore хранит данные о нашем приложении, тогда как TrustStore – о других, которым мы доверяем.
По умолчанию не подключается никакой KeyStore. Подключить его можно параметрами javax.net.ssl.keyStore (расположение файла), javax.net.ssl.keyStoreType (тип) и javax.net.ssl.keyStorePassword (пароль). Добавочные можно загружать динамически, классом java.security.KeyStore.
По умолчанию в приложении подключен один TrustStore, файл jre/lib/security/cacerts. Переопределить его можно параметрами JVM javax.net.ssl.trustStore, javax.net.ssl.trustStorePassword и javax.net.ssl.trustStorePassword.
Типичный пример использования – подключить TrustStore с самоподписанным SSL сертификатом, чтобы приложение могло ходить на определенный сайт по протоколу HTTPS, не проваливая проверку безопасности. Либо же подключить KeyStore с подлинным SSL сертификатом, чтобы приложение само работало как HTTPS-сервер.
👍16❤3
- Осваивай Spring!
Тест на знание языка Java
— Ответь на 21 вопрос и проверь, насколько хорошо ты знаешь язык Java и готов освоить Spring. Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработчик на Spring" Framework со скидкой!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruPlease open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2❤1
Как приложению ограничить доступ к файлу?
В целях безопасности, весь доступ приложения к определенным частям кода и ресурсам может быть ограничен. Решения о доступе к, например, Reflection API, или к файлу принимаются менеджером безопасности.
Внутри менеджера представлен набор методов check*(), которые делегируют выполнение основному методу checkPermission(). Сам доступ, права на который нужно проверить, представляется классом java.security.Permission. Так, доступ к файлу на чтение проверяет метод checkRead. Он передает в checkPermission объект FilePermission с указанным именем файла.
Экземпляр класса SecurityManager, который реализует нужную логику ограничения доступа, можно установить программно методом System.setSecurityManager, или на старте приложения флагом -Djava.security.manager. По умолчанию менеджер не установлен.
Менеджер безопасности изначально был нужен для ограничения апплетов – они выполнялись в браузере пользователя и не должны были получить доступ к локальным пользовательским данным. Сейчас технология апплетов устарела, но SecurityManager остается всё таким же актуальным.
В целях безопасности, весь доступ приложения к определенным частям кода и ресурсам может быть ограничен. Решения о доступе к, например, Reflection API, или к файлу принимаются менеджером безопасности.
Внутри менеджера представлен набор методов check*(), которые делегируют выполнение основному методу checkPermission(). Сам доступ, права на который нужно проверить, представляется классом java.security.Permission. Так, доступ к файлу на чтение проверяет метод checkRead. Он передает в checkPermission объект FilePermission с указанным именем файла.
Экземпляр класса SecurityManager, который реализует нужную логику ограничения доступа, можно установить программно методом System.setSecurityManager, или на старте приложения флагом -Djava.security.manager. По умолчанию менеджер не установлен.
Менеджер безопасности изначально был нужен для ограничения апплетов – они выполнялись в браузере пользователя и не должны были получить доступ к локальным пользовательским данным. Сейчас технология апплетов устарела, но SecurityManager остается всё таким же актуальным.
👍5🔥1
Как прочитать криптографический ключ?
KeyFactory – основной класс платформы Java для работы с криптографическими ключами. Набор реализаций для этой фабрики подключается с помощью механизма SPI.
Существует большое разнообразие алгоритмов шифрования: DSA, RSA, и другие. Строка-название нужного алгоритма поставляется в фабрику ключей при её создании.
KeyFactory занимается конвертацией спецификации ключа в сам публичный или приватный ключ, и обратно.
Спецификация, объект интерфейса KeySpec, – входные данные ключа. Это может быть например модуль и экспонента приватного ключа RSA.
Сами внутренние представления ключей реализуют интерфейсы PublicKey и PrivateKey – наследники общего Key.
Для каждого конкретного типа ключа используются соответствующие им классы-реализации интерфейсов.
KeyFactory – основной класс платформы Java для работы с криптографическими ключами. Набор реализаций для этой фабрики подключается с помощью механизма SPI.
Существует большое разнообразие алгоритмов шифрования: DSA, RSA, и другие. Строка-название нужного алгоритма поставляется в фабрику ключей при её создании.
KeyFactory занимается конвертацией спецификации ключа в сам публичный или приватный ключ, и обратно.
Спецификация, объект интерфейса KeySpec, – входные данные ключа. Это может быть например модуль и экспонента приватного ключа RSA.
Сами внутренние представления ключей реализуют интерфейсы PublicKey и PrivateKey – наследники общего Key.
Для каждого конкретного типа ключа используются соответствующие им классы-реализации интерфейсов.
👍9🥰3
Готов принять вызов❔
⚡ Стартовала регистрация на Всероссийские соревнования по продуктовому программированию «Хакатон: умный помощник для тендеров»!
Присоединяйтесь к участию и станьте частью комьюнити Федерации спортивного программирования, объединяющей талантливых специалистов и спортсменов!
Без лишних слов переходим к сути⬅️
⏩ Когда: 23-25 марта 2024 года
⏩ Формат: гибридный
⏩ Итоги: питч-сессия пройдёт 25 марта на площадке РЭУ им. Г.В. Плеханова.
Командам из регионов доступно участие в онлайн-формате
⏩ Дедлайн регистрации: 20 марта, 23:59 (мск)
Какой кейс предстоит решить командам?
Разработка умного помощника для участия в тендерах: необходимо создать цифровой инструмент, который поможет автоматически собрать информацию по тендерам из открытых источников, и будет автоматически подбирать список позиций компании, которые подходят по критериям тендера, и делать рекомендацию сотруднику маркетинговой службы.
Кого мы ждём?
⏺ Студенческие команды в составе от 3-х до 5-ти человек
⏺ Учащихся технических специальностей
⏺ IT-специалистов
⏺ Заинтересованных представителей регионов Российской Федерации
Регистрируйся по ссылке и принимай участие в IT-соревновании от Федерации спортивного программирования!
Присоединяйтесь к участию и станьте частью комьюнити Федерации спортивного программирования, объединяющей талантливых специалистов и спортсменов!
Без лишних слов переходим к сути
Командам из регионов доступно участие в онлайн-формате
Какой кейс предстоит решить командам?
Разработка умного помощника для участия в тендерах: необходимо создать цифровой инструмент, который поможет автоматически собрать информацию по тендерам из открытых источников, и будет автоматически подбирать список позиций компании, которые подходят по критериям тендера, и делать рекомендацию сотруднику маркетинговой службы.
Кого мы ждём?
Регистрируйся по ссылке и принимай участие в IT-соревновании от Федерации спортивного программирования!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2❤1
Как сгенерировать хорошее случайное число?
Этот вопрос глубже, чем кажется на первый взгляд. Для начала, нужно разобраться в двух понятиях: псевдослучайные, и истинно случайные числа.
Псевдослучайные числа – это последовательность случайных на вид чисел, на самом деле полученных в результате математического алгоритма. Последовательность таких чисел можно воспроизвести, зная начальные условия (seed, энтропия) и используемый алгоритм. Метод, который используется для генерации чисел в классе java.util.Random, дает криптографически ненадежные псевдослучайные числа – злоумышленник может достаточно легко их предугадывать.
Истинно случайные числа основываются на физических свойствах, которые трудно поддаются измерению. Это могут быть, например, доли секунд текущего системного времени. Алгоритм генерации истинно случайных чисел не позволяет с хорошей точностью угадать следующее число, даже зная предыдущие.
Класс SecureRandom предоставляет доступ к криптографически надежным генераторам случайных чисел. При том, это могут быть как достаточно сложные последовательности псевдослучайных, так и истинно случайные числа. Согласно стандартам безопасности, они будут достаточно непредсказуемы.
Не все случайные числа одинаково случайны. Шанс что рост случайного человека окажется ближе к среднему высок, тогда как у игральной кости одинакова вероятность выпадения любой из граней. В математике это называется распределением вероятностей.
Внутри SecureRandom использует SPI. Мы можем выбирать из различных алгоритмов генерации и их провайдеров, указав их названия в фабричном методе getInstance. Все перечисленные выше свойства определяются именно используемым алгоритмом.
Этот вопрос глубже, чем кажется на первый взгляд. Для начала, нужно разобраться в двух понятиях: псевдослучайные, и истинно случайные числа.
Псевдослучайные числа – это последовательность случайных на вид чисел, на самом деле полученных в результате математического алгоритма. Последовательность таких чисел можно воспроизвести, зная начальные условия (seed, энтропия) и используемый алгоритм. Метод, который используется для генерации чисел в классе java.util.Random, дает криптографически ненадежные псевдослучайные числа – злоумышленник может достаточно легко их предугадывать.
Истинно случайные числа основываются на физических свойствах, которые трудно поддаются измерению. Это могут быть, например, доли секунд текущего системного времени. Алгоритм генерации истинно случайных чисел не позволяет с хорошей точностью угадать следующее число, даже зная предыдущие.
Класс SecureRandom предоставляет доступ к криптографически надежным генераторам случайных чисел. При том, это могут быть как достаточно сложные последовательности псевдослучайных, так и истинно случайные числа. Согласно стандартам безопасности, они будут достаточно непредсказуемы.
Не все случайные числа одинаково случайны. Шанс что рост случайного человека окажется ближе к среднему высок, тогда как у игральной кости одинакова вероятность выпадения любой из граней. В математике это называется распределением вероятностей.
Внутри SecureRandom использует SPI. Мы можем выбирать из различных алгоритмов генерации и их провайдеров, указав их названия в фабричном методе getInstance. Все перечисленные выше свойства определяются именно используемым алгоритмом.
👍18🔥3😁1
С чего начать изучение микросервисной архитектуры?
Прийти на бесплатный практический урок «Аутентификации и авторизация микросервисов», где опытный эксперт разберет:
1. Введение в микросервисную архитектуру
2. Паттерн аутентификации в микросервисах
3. Паттерн авторизации и управление доступом
4. Безопасность и мониторинг
Занятие пройдёт 3 апреля в 20:00 мск в рамках курса «Microservice Architecture». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://vk.cc/cvyTDE
Прийти на бесплатный практический урок «Аутентификации и авторизация микросервисов», где опытный эксперт разберет:
1. Введение в микросервисную архитектуру
2. Паттерн аутентификации в микросервисах
3. Паттерн авторизации и управление доступом
4. Безопасность и мониторинг
Занятие пройдёт 3 апреля в 20:00 мск в рамках курса «Microservice Architecture». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://vk.cc/cvyTDE
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru👍3🔥1
Как создать пару публичный/приватный ключ?
Не следует путать генерацию ключей с задачей их чтения, о которой здесь писали ранее.
Для генерации ключей используется KeyPairGenerator. Архитектурно он похож на читающую ключи KeyFactory: реализации для разных алгоритмов также поставляются через SPI, доступ к ним также осуществляется через getInstance.
Перед использованием, генератор нужно инициализировать. Для этого методом initialize устанавливаются три опциональных параметра:
• Желаемый размер ключа;
• Источник случайных значений типа SecureRandom;
• Специфичные для алгоритма настройки в объекте подкласса AlgorithmParameterSpec.
Если к моменту создания ключей генератор не инициализирован, или при инициализации часть параметров не указана, эти параметры примут дефолтные значения. Каждый провайдер устанавливает свои собственные дефолты.
Сам метод генерации generateKeyPair не требует параметров. Его можно вызывать повторно для генерации нескольких разных пар. Результат его вызова – объект KeyPair, который просто хранит под уже знакомыми нам интерфейсами PrivateKey и PublicKey пару инстансов специфичных для алгоритма подклассов.
Не следует путать генерацию ключей с задачей их чтения, о которой здесь писали ранее.
Для генерации ключей используется KeyPairGenerator. Архитектурно он похож на читающую ключи KeyFactory: реализации для разных алгоритмов также поставляются через SPI, доступ к ним также осуществляется через getInstance.
Перед использованием, генератор нужно инициализировать. Для этого методом initialize устанавливаются три опциональных параметра:
• Желаемый размер ключа;
• Источник случайных значений типа SecureRandom;
• Специфичные для алгоритма настройки в объекте подкласса AlgorithmParameterSpec.
Если к моменту создания ключей генератор не инициализирован, или при инициализации часть параметров не указана, эти параметры примут дефолтные значения. Каждый провайдер устанавливает свои собственные дефолты.
Сам метод генерации generateKeyPair не требует параметров. Его можно вызывать повторно для генерации нескольких разных пар. Результат его вызова – объект KeyPair, который просто хранит под уже знакомыми нам интерфейсами PrivateKey и PublicKey пару инстансов специфичных для алгоритма подклассов.
👍5🥰1
Вакансии для тех, кто хочет работать на море 🌊
Приглашаем специалистов DevOps, Java, JavaScript на открытые вакансии IT-офиса Сбера в Сочи. Мы создаём и развиваем банковские продукты для компаний в Индии, внедряем лучшие практики банкинга на индийский рынок.
У тебя есть уникальная возможность поучаствовать в построении автоматизированной банковской системы с нуля. Система состоит из набора модулей:
✔️ Ядро
✔️ Бухучёт и отчетность
✔️ Интернет-банк и антифрод-система
✔️ Кредитные продукты и не только
В создании любого из них ты можешь принять непосредственное участие, повлиять на архитектуру и процессы, и на то, как в конечном итоге они должны выглядеть.
Часть команды в России, часть в Индии. А это значит, что у тебя есть отличная возможность поработать в международной команде!
Откликайся на вакансии по ссылке 😉
Приглашаем специалистов DevOps, Java, JavaScript на открытые вакансии IT-офиса Сбера в Сочи. Мы создаём и развиваем банковские продукты для компаний в Индии, внедряем лучшие практики банкинга на индийский рынок.
У тебя есть уникальная возможность поучаствовать в построении автоматизированной банковской системы с нуля. Система состоит из набора модулей:
✔️ Ядро
✔️ Бухучёт и отчетность
✔️ Интернет-банк и антифрод-система
✔️ Кредитные продукты и не только
В создании любого из них ты можешь принять непосредственное участие, повлиять на архитектуру и процессы, и на то, как в конечном итоге они должны выглядеть.
Часть команды в России, часть в Индии. А это значит, что у тебя есть отличная возможность поработать в международной команде!
Откликайся на вакансии по ссылке 😉
❤12👍2🔥2
Когда стоит выбрать char[] вместо String?
Первая, очевидная причина – оптимизация. Если вам заранее известен размер строки, и он фиксирован, может быть полезно выбрать массив. Если программа работает с неизменяемыми подстроками, удобно представить их в виде offset-ов общего массива (как это было сделано раньше в самом String).
Следует помнить, что оптимизировать нужно осознанно и своевременно. JVM тоже прикладывает усилия по оптимизации строк (вроде интернирования), которые могут оказаться эффективнее ваших.
Вторая, менее очевидная причина – безопасность. Строки в Java иммутабельны. Это значит, что когда вы сохраняете пароль в объекте типа String, физически уничтожить его из памяти может только сборщик мусора.
Существует способ алгоритмической атаки на систему, когда хакер своими действиями вызывает переполнение памяти, и конфиденциальная информация попадает в heap dump.
Если пароль хранится в массиве, программист может самостоятельно «занулить» значение после использования.
Первая, очевидная причина – оптимизация. Если вам заранее известен размер строки, и он фиксирован, может быть полезно выбрать массив. Если программа работает с неизменяемыми подстроками, удобно представить их в виде offset-ов общего массива (как это было сделано раньше в самом String).
Следует помнить, что оптимизировать нужно осознанно и своевременно. JVM тоже прикладывает усилия по оптимизации строк (вроде интернирования), которые могут оказаться эффективнее ваших.
Вторая, менее очевидная причина – безопасность. Строки в Java иммутабельны. Это значит, что когда вы сохраняете пароль в объекте типа String, физически уничтожить его из памяти может только сборщик мусора.
Существует способ алгоритмической атаки на систему, когда хакер своими действиями вызывает переполнение памяти, и конфиденциальная информация попадает в heap dump.
Если пароль хранится в массиве, программист может самостоятельно «занулить» значение после использования.
👍11🔥3❤2👏2🌚1
⁉️ Как стать востребованным разработчиком на Java в 2024?
Освойте JVM и облачную инфраструктуру на онлайн-курсе «Java Developer. Advanced» от OTUS.
После обучения вы сможете:
Все это позволит вам претендовать на вакантные позиции в крупных российских и международных компаниях.
Стартуем уже 28 марта!
👉 Узнайте подробности и пройдите короткий тест прямо сейчас, это последний шанс попасть в группу: https://otus.pw/fP3l/
Освойте JVM и облачную инфраструктуру на онлайн-курсе «Java Developer. Advanced» от OTUS.
После обучения вы сможете:
- реализовать проект с несколькими сервисами, развёрнутыми в Kubernetes с демонстрацией модели метрик на дашборде Grafana;
- подать нагрузку на приложение, снять дамп памяти и описать его содержимое;
- запустить профилирование приложения под нагрузкой.
Все это позволит вам претендовать на вакантные позиции в крупных российских и международных компаниях.
Стартуем уже 28 марта!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
В чём разница между jar и war?
jar и war – расширения платформо-независимых файлов-архивов Java-приложения. Кроме них есть еще третий формат, ear. Все эти форматы – на самом деле просто zip-архивы с классами и другими частями приложения. Вы можете переименовать такой файл в .zip, разархивировать, и посмотреть, что внутри.
JAR – Java Archive. Содержит файлы классов, ресурсы, зависимые библиотеки, и другие необходимые для приложения файлы. Может содержать точку входа, и использоваться как цель для исполнения команды java.
WAR – Web Archive. Технически имеет ту же структуру, но другую роль – архив JavaEE web-компонента. Обычно содержит jar-ы с реализацией, JSP, статические файлы фронт-энда, и мета-информацию для сервлет-контейнера (web.xml). В основном используется как деплоймент web-приложения в сервлет-контейнер. С приходом Servlet API 3.0 и embedded-контейнеров, всё больше становится принято запаковывать и web-компоненты в самодостаточные jar (Лозунг Spring Boot: Make jar, not war).
EAR – Enterprise Archive. Для разработчиков, начавших карьеру уже во времена Spring Framework, может показаться совсем экзотичным. Это собранное воедино монолитное JavaEE приложение. Содержит дескрипторы деплоймента и JavaEE модули (веб-модули, EJB, клиентские модули, адаптеры ресурсов). Деплоится в JavaEE Application Server.
Все три типа файлов собираются утилитой jar из JDK.
jar и war – расширения платформо-независимых файлов-архивов Java-приложения. Кроме них есть еще третий формат, ear. Все эти форматы – на самом деле просто zip-архивы с классами и другими частями приложения. Вы можете переименовать такой файл в .zip, разархивировать, и посмотреть, что внутри.
JAR – Java Archive. Содержит файлы классов, ресурсы, зависимые библиотеки, и другие необходимые для приложения файлы. Может содержать точку входа, и использоваться как цель для исполнения команды java.
WAR – Web Archive. Технически имеет ту же структуру, но другую роль – архив JavaEE web-компонента. Обычно содержит jar-ы с реализацией, JSP, статические файлы фронт-энда, и мета-информацию для сервлет-контейнера (web.xml). В основном используется как деплоймент web-приложения в сервлет-контейнер. С приходом Servlet API 3.0 и embedded-контейнеров, всё больше становится принято запаковывать и web-компоненты в самодостаточные jar (Лозунг Spring Boot: Make jar, not war).
EAR – Enterprise Archive. Для разработчиков, начавших карьеру уже во времена Spring Framework, может показаться совсем экзотичным. Это собранное воедино монолитное JavaEE приложение. Содержит дескрипторы деплоймента и JavaEE модули (веб-модули, EJB, клиентские модули, адаптеры ресурсов). Деплоится в JavaEE Application Server.
Все три типа файлов собираются утилитой jar из JDK.
❤13👍7🔥3
Подборка горячих вакансий в Ozon для Senior Java-разработчиков
🔵 Старший разработчик Java, Верхний поиск
🔵 Старший разработчик Java, GPU Инфраструктуры
🔵 Старший разработчик Kotlin, ML Инфраструктура
Почему нужно идти в Ozon: здесь соединяется мир разработки сложных вычислительных систем с миром Data Science.
Что предлагают:
Достойный уровень зп
Удалёнку из любой точки / гибрид / офис
Возможность делать классные продукты на рынке e-com
Систему менторства, адаптации, обучения
Сильное экспертное коммьюнити: митапы, блоги, конференции и подкасты. Поддержку развития профессионального бренда сотрудников со стороны DevRel-ов.
🔵 Старший разработчик Java, Верхний поиск
🔵 Старший разработчик Java, GPU Инфраструктуры
🔵 Старший разработчик Kotlin, ML Инфраструктура
Почему нужно идти в Ozon: здесь соединяется мир разработки сложных вычислительных систем с миром Data Science.
Что предлагают:
Достойный уровень зп
Удалёнку из любой точки / гибрид / офис
Возможность делать классные продукты на рынке e-com
Систему менторства, адаптации, обучения
Сильное экспертное коммьюнити: митапы, блоги, конференции и подкасты. Поддержку развития профессионального бренда сотрудников со стороны DevRel-ов.
🎉3👍2🔥1
Как отладить удаленное приложение?
Если приложение работает не в продакшне, его паузы допустимы, а у потенциального злоумышленника нет сетевого доступа к хосту, стандартный способ отладки – непосредственно remote debug. Для этого приложение запускается с включенным протоколом удаленной отладки JDWP. Приложение принимает на указанный порт подключения отладчика. Это может быть отдельная утилита jdb, или встроенная в IDE.
В JDK поставляется набор инструментов для мониторинга. Например Java Mission Control и JConsole позволяют подключиться к приложению и посмотреть множество показателей его здоровья. Полный список инструментов специфичен для конкретной JVM, для HotSpot можно посмотреть в документации.
Вне зависимости от обстоятельств, всегда необходимо заранее позаботиться о диагностической информации номер один – логах. Как минимум, ни один встроенный инструмент не покажет вам информацию о событиях, определяемых бизнес-логикой вашего приложения. Логироваться должен необходимый минимум, который позволит при любом инциденте понять, что произошло.
В стандартную поставку Java включен пакет для логгирования java.util.logging, позже остановимся на нём подробнее. Также существует ряд популярных библиотек: Log4j, SLF4J, Logback.
Если приложение работает не в продакшне, его паузы допустимы, а у потенциального злоумышленника нет сетевого доступа к хосту, стандартный способ отладки – непосредственно remote debug. Для этого приложение запускается с включенным протоколом удаленной отладки JDWP. Приложение принимает на указанный порт подключения отладчика. Это может быть отдельная утилита jdb, или встроенная в IDE.
В JDK поставляется набор инструментов для мониторинга. Например Java Mission Control и JConsole позволяют подключиться к приложению и посмотреть множество показателей его здоровья. Полный список инструментов специфичен для конкретной JVM, для HotSpot можно посмотреть в документации.
Вне зависимости от обстоятельств, всегда необходимо заранее позаботиться о диагностической информации номер один – логах. Как минимум, ни один встроенный инструмент не покажет вам информацию о событиях, определяемых бизнес-логикой вашего приложения. Логироваться должен необходимый минимум, который позволит при любом инциденте понять, что произошло.
В стандартную поставку Java включен пакет для логгирования java.util.logging, позже остановимся на нём подробнее. Также существует ряд популярных библиотек: Log4j, SLF4J, Logback.
⚡6👍1
Присоединяйтесь к открытому уроку «Знакомство с Armeria»
На уроке мы погрузимся в удивительный мир фреймворка Armeria! Узнаем, какие возможности он предоставляет и как эффективно использовать его вместе с SpringBoot.
Урок посвящен курсу «Java Developer. Professional» от OTUS, где вы сможете расширить свои знания и навыки в Java разработке, и в частности, познакомиться с передовыми технологиями, такими как Armeria.
🔥 Не упустите шанс поучаствовать в увлекательном уроке и расширить свои профессиональные горизонты!
👉 Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись:
https://otus.pw/yXtg/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Когда использовать WEB-INF, а когда META-INF?
В корне архива java-приложения часто встречаются директории WEB-INF и META-INF. Обе директории хранят в себе различные файлы с метаинформацией о программе, обычно в текстовом виде: yaml, xml, json, обычный текст.
META-INF используется в архивах всех типов. Главный файл этой директории – MANIFEST.MF, о котором уже говорили ранее. Там же хранятся
• Объявления провайдеров SPI;
• Подпись архива: файлы .SF, .DSA, .RSA;
• INDEX.LIST с подсказками о местонахождении пакетов для загрузчика.
Иногда (не часто) приложения добавляют туда свои статические ресурсы, так как эта директория попадает в classpath и доступна в рантайме.
WEB-INF используется только в web-архивах (.war). Она не заменяет, но дополняет META-INF. В ней хранится:
• Главный файл web-приложения web.xml;
• Дескрипторы тегов .TLD;
• Поддиректория classes/ с классами web-приложения;
• Поддиректория lib/ с .jar-библиотеками зависимостей;
• Поддиректория tag/ с файлами тегов.
В корне архива java-приложения часто встречаются директории WEB-INF и META-INF. Обе директории хранят в себе различные файлы с метаинформацией о программе, обычно в текстовом виде: yaml, xml, json, обычный текст.
META-INF используется в архивах всех типов. Главный файл этой директории – MANIFEST.MF, о котором уже говорили ранее. Там же хранятся
• Объявления провайдеров SPI;
• Подпись архива: файлы .SF, .DSA, .RSA;
• INDEX.LIST с подсказками о местонахождении пакетов для загрузчика.
Иногда (не часто) приложения добавляют туда свои статические ресурсы, так как эта директория попадает в classpath и доступна в рантайме.
WEB-INF используется только в web-архивах (.war). Она не заменяет, но дополняет META-INF. В ней хранится:
• Главный файл web-приложения web.xml;
• Дескрипторы тегов .TLD;
• Поддиректория classes/ с классами web-приложения;
• Поддиректория lib/ с .jar-библиотеками зависимостей;
• Поддиректория tag/ с файлами тегов.
👍10
Освойте разработку ПО на профессиональном уровне и расширьте свои карьерные возможности в IT.
Научитесь применять шаблоны проектирования и SOLID в разработке всего за 4 месяца под руководством опытных экспертов на онлайн-курсе «Архитектура и шаблоны проектирования» от OTUS.
После обучения вы:
▫️поймете, что такое рефакторинг и как писать чистый код;
▫️разберетесь в современных процессах разработки программного обеспечения;
▫️сможете претендовать на повышение грейда, должности и дохода.
Для прохождения программы необходимо:
▫️знание одного из языков программирования: C++, C#, Java, Kotlin, PHP или Python;
▫️знание принципов ООП
➡️ Пройдите вступительное тестирование прямо сейчас, чтобы попасть на курс по спец.цене и получить курс по Git в записи бесплатно: пройти тест
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Научитесь применять шаблоны проектирования и SOLID в разработке всего за 4 месяца под руководством опытных экспертов на онлайн-курсе «Архитектура и шаблоны проектирования» от OTUS.
После обучения вы:
▫️поймете, что такое рефакторинг и как писать чистый код;
▫️разберетесь в современных процессах разработки программного обеспечения;
▫️сможете претендовать на повышение грейда, должности и дохода.
Для прохождения программы необходимо:
▫️знание одного из языков программирования: C++, C#, Java, Kotlin, PHP или Python;
▫️знание принципов ООП
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🥰2🔥1
Они уже среди нас: робопчелы, робосоколы и даже роборыбки гуппи.
Зачем всё это нужно и почему животные не замечают подвоха, читайте в канале Фон от МегаФона. Там рассказывают, куда нас приведут такие технологии, а прямо сейчас еще и подписку Telegram Premium разыгрывают.
erid: LjN8JwbUv
Зачем всё это нужно и почему животные не замечают подвоха, читайте в канале Фон от МегаФона. Там рассказывают, куда нас приведут такие технологии, а прямо сейчас еще и подписку Telegram Premium разыгрывают.
erid: LjN8JwbUv
❤4
Как вызвать нативный код?
Нативным (или машинным) кодом называется скомпилированный бинарный код. В него компилируется, например, код на C++. Java приложение может работать на любой платформе именно потому, что оно не компилируется в бинарник – вместо этого его байткод выполняется на виртуальной машине. Но порой нужно обратиться к готовой программе на другом языке, или воспользоваться специальными возможностями ОС.
Если бинарный код поставляется в виде библиотеки (.dll в Windows, .so в Unix), у вас есть два варианта:
JNI (Java Native Interface) – стандартный фреймворк взаимодействия с бинарным кодом. С ним можно в Java исходнике объявить метод без тела, а реализацию брать из бинарного файла. Простой пример использования читайте на хабре.
JNA (Java Native Access) – сторонняя open-source библиотека, ставшая стандартом де-факто. Медленнее чем JNI, но гораздо проще в использовании. В отличие от JNI не требует кодогенерации и написания вспомогательной обвязки. Несколько примеров вызова из Java кода функций бинарных библиотек можно найти на википедии.
Когда нативный код исполняемый (.exe в Windows, файл с правом x в Unix), можно запустить его отдельным процессом, как было описано ранее. Но если вы разрабатываете этот бинарный код самостоятельно, то лучше сэкономить на создании отдельного процесса, и выбрать вариант сборки в библиотеку.
Нативным (или машинным) кодом называется скомпилированный бинарный код. В него компилируется, например, код на C++. Java приложение может работать на любой платформе именно потому, что оно не компилируется в бинарник – вместо этого его байткод выполняется на виртуальной машине. Но порой нужно обратиться к готовой программе на другом языке, или воспользоваться специальными возможностями ОС.
Если бинарный код поставляется в виде библиотеки (.dll в Windows, .so в Unix), у вас есть два варианта:
JNI (Java Native Interface) – стандартный фреймворк взаимодействия с бинарным кодом. С ним можно в Java исходнике объявить метод без тела, а реализацию брать из бинарного файла. Простой пример использования читайте на хабре.
JNA (Java Native Access) – сторонняя open-source библиотека, ставшая стандартом де-факто. Медленнее чем JNI, но гораздо проще в использовании. В отличие от JNI не требует кодогенерации и написания вспомогательной обвязки. Несколько примеров вызова из Java кода функций бинарных библиотек можно найти на википедии.
Когда нативный код исполняемый (.exe в Windows, файл с правом x в Unix), можно запустить его отдельным процессом, как было описано ранее. Но если вы разрабатываете этот бинарный код самостоятельно, то лучше сэкономить на создании отдельного процесса, и выбрать вариант сборки в библиотеку.
👍8🔥4❤2😁1
Как архитектурно правильно подходить к избыточности при проектировании высоконагруженных систем?
Узнайте на бесплатном практическом уроке «Балансировка и отказоустойчивость приложений с HAProxy» от OTUS, где вы вместе с опытным экспертом разберете:
1. Как настраивать TCP / UDP балансировщик
2. Как работает и настраивается haproxy
3. Ответы на все возникающие вопросы по теме
Занятие пройдёт 28 марта в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://otus.pw/Zarv/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Узнайте на бесплатном практическом уроке «Балансировка и отказоустойчивость приложений с HAProxy» от OTUS, где вы вместе с опытным экспертом разберете:
1. Как настраивать TCP / UDP балансировщик
2. Как работает и настраивается haproxy
3. Ответы на все возникающие вопросы по теме
Занятие пройдёт 28 марта в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://otus.pw/Zarv/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🔥2❤1👍1😐1