Перейти к основному содержимому

· 4 мин. чтения

1. Введение

RxJava — одна из самых популярных библиотек реактивного программирования.

А Ratpack — это набор библиотек Java для создания компактных и мощных веб-приложений, построенных на Netty.

В этом руководстве мы обсудим включение RxJava в приложение Ratpack для создания красивого реактивного веб-приложения.

2. Зависимости Maven

· 5 мин. чтения

1. Обзор

В этой статье мы рассмотрим различные способы объединения издателей в Project Reactor .

2. Зависимости Maven

Давайте настроим наш пример с зависимостями Project Reactor :

<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<version>3.1.4.RELEASE</version>
<scope>test</scope>
</dependency>

· 6 мин. чтения

1. Обзор

Как полнофункциональная платформа ORM, Hibernate отвечает за управление жизненным циклом постоянных объектов (сущностей), включая операции CRUD, такие как чтение , сохранение , обновление и удаление .

В этой статье мы рассмотрим различные способы удаления объектов из базы данных с помощью Hibernate , а также объясним распространенные проблемы и подводные камни, которые могут возникнуть.

Мы используем JPA и делаем шаг назад и используем собственный API Hibernate только для тех функций, которые не стандартизированы в JPA.

2. Различные способы удаления объектов

· 6 мин. чтения

1. Обзор

В этом руководстве мы рассмотрим атаку удаленного выполнения кода на библиотеку сериализации XStream XML. Этот эксплойт относится к категории атак ненадежной десериализации .

Мы узнаем, когда XStream уязвим для этой атаки, как работает атака и как предотвратить такие атаки.

2. Основы XStream

Прежде чем описывать атаку, давайте рассмотрим некоторые основы XStream. XStream — это библиотека сериализации XML, которая транслирует типы Java и XML. Рассмотрим простой класс Person :

· 9 мин. чтения

1. Обзор

В этом уроке мы собираемся обсудить различия между Mock , Stub и Spy в среде Spock . Мы проиллюстрируем, что предлагает инфраструктура в отношении тестирования на основе взаимодействия.

Spock — это среда тестирования для Java и Groovy , которая помогает автоматизировать процесс ручного тестирования программного приложения. Он представляет свои собственные макеты, заглушки и шпионы и поставляется со встроенными возможностями для тестов, которые обычно требуют дополнительных библиотек.

Во-первых, мы проиллюстрируем, когда мы должны использовать заглушки. Затем мы пройдем через насмешки. В конце мы опишем недавно представленный Spy .

2. Зависимости Maven

· 11 мин. чтения

1. Обзор

В этом уроке мы рассмотрим расширения Spock .

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

Spock имеет широкий спектр различных расширений , которые мы можем подключить к жизненному циклу спецификации.

Давайте узнаем, как использовать наиболее распространенные расширения.

2. Зависимости Maven

· 5 мин. чтения

1. Обзор

В этой быстрой статье мы сосредоточимся на различных типах интерфейсов репозитория Spring Data и их функциональности. Мы коснемся:

  • CrudRepository
  • PagingAndSortingRepository
  • JpaРепозиторий

Проще говоря, каждый репозиторий в Spring Data расширяет общий интерфейс репозитория , но помимо этого каждый из них имеет разные функциональные возможности.

2. Хранилища данных Spring

· 8 мин. чтения

1. Введение

В этом руководстве мы рассмотрим устаревшие классы в Spring и Spring Boot и объясним, чем они были заменены.

Мы рассмотрим классы, начиная с Spring 4 и Spring Boot 1.4.

2. Устаревшие классы в Spring

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

· 8 мин. чтения

1. Обзор

В этом руководстве мы опишем атаки перечислением в целом. В частности, мы рассмотрим атаки с перечислением имен пользователей на веб-приложения. И, самое главное, мы рассмотрим варианты их обработки с помощью Spring Security.

2. Объяснение атак перечислением

Технически перечисление означает полный и упорядоченный список всех элементов коллекции. Хотя это определение ограничено математикой, его суть делает его мощным инструментом взлома. Перечисление часто выявляет векторы атак, которые можно использовать для эксплуатации. В этом контексте его часто называют перечислением ресурсов.

Перечисление ресурсов, как следует из названия, — это способ собрать список ресурсов с любого хоста. Этими ресурсами может быть что угодно ценное, включая имена пользователей, сервисы или страницы. Эти ресурсы могут раскрыть потенциальные уязвимости в узле.

· 3 мин. чтения

1. Введение

AssertJ — это библиотека, предоставляющая плавные утверждения для Java. Подробнее об этом можно прочитать здесь и здесь .

Недавно была выпущена версия 3.6.0 вместе с двумя небольшими исправлениями ошибок 3.6.1 и 3.6.2.

Сегодня с нами Джоэл Костильола — создатель библиотеки, который расскажет вам еще немного о релизе и планах на будущее.

«Мы пытаемся сделать AssertJ действительно ориентированным на сообщество»

2. Версии 2.6.0 и 3.6.0 были выпущены почти одновременно. В чем разница между ними?

Версии 2.x ориентированы на Java 7, а версии 3.x — на Java 8. Другой способ увидеть это состоит в том, что 3.x = 2.x + специфические функции Java 8.

3. Какие самые заметные изменения/дополнения появились в 3.6.0/2.6.0?

В 2.6.0 появились другие мелкие функции, но не было больших дополнений. Если бы мне пришлось выбирать, наиболее интересными были бы те, которые связаны с подавленными исключениями:

hasSuppresedException()

hasNoSuppresedExceptions()

3.6.0 дополнительно получил способ проверки множественных утверждений для элементов массива/итерируемых/карты:

  • всеудовлетворить ()
  • hasEntrySatisfying ()

4. С момента выпуска 3.6.0 появилось два выпуска исправлений (3.6.1, 3.6.2). Не могли бы вы рассказать нам немного больше, что там произошло и что нужно было исправить?

В 3.6.1 filteredOn(Predicate) работал только со списком , но не с Iterable, что довольно плохо.

В 3.6.2 мы не додумались извлекать свойства из дефолтного геттера Java 8, оказывается он не работал из коробки после некоторого внутреннего рефакторинга.

Я спросил пользователей, могут ли они дождаться следующей версии, репортер об ошибках сказал мне, что он может подождать, но другой пользователь хотел этого, поэтому я выпустил новую версию. Мы пытаемся сделать AssertJ действительно ориентированным на сообщество , поскольку выпуск релиза обходится дешево (ну, за исключением части документации), я обычно не вижу проблем с релизом.

5. Сталкивались ли вы с какими-либо интересными техническими проблемами при работе над новейшим релизом?

Я укажу на проблему, с которой столкнулся при работе над следующим релизом 3.7.0, который должен выйти через несколько недель.

Java 8 требовательна к «неоднозначным» сигнатурам методов. Мы добавили новый метод assertThat, который принимает ThrowingCallable (простой класс, который является Callable , выбрасывающим исключение). Оказалось, что Java 8 путает его с другим методом assertThat , который принимает Iterable!

Это было самым удивительным для меня, поскольку я не вижу никакой двусмысленности между ними.

6. Планируете ли вы в ближайшее время новый крупный релиз? Что-нибудь, что будет использовать дополнения Java 9?

В ближайшие недели/месяц. Обычно мы стараемся выпускать релизы каждые несколько месяцев или когда появляются крупные дополнения.

Паскаль Шумахер, который присоединился к команде AssertJ, проделал некоторую работу над Java 9, чтобы проверить совместимость, некоторые вещи не работают, в основном те, которые полагаются на самоанализ, поскольку Java 9 меняет правила доступа. Что мы сделаем, так это запустим ветку 4.x, которая будет ориентирована на Java 9, следуя той же стратегии, что и 3.x против 2.x, у нас будет 4.x = 3.x + функции Java 9.

Как только 4.0 будет официально выпущен, мы, скорее всего, прекратим активную разработку 2.x, но продолжим принимать PR, поскольку у нас нет возможности синхронизировать 3 версии, я имею в виду, что мы сообщаем о любых изменениях с версии nx на n+1.x. версию, поэтому добавление чего-либо в 2.x нужно будет сообщать как в 3.x, так и в 4.x, а это слишком много работы на данный момент.