Конфликты зависимостей bouncycastle

У меня есть веб-приложение, созданное с использованием весенней загрузки. Я добавил отчет jasper, зависимость iText и bouncycastle от maven. И Jasper, и iText содержат библиотеки bouncycastle, и теперь из-за этого веб-приложение работает некорректно.

Ошибка: java.security.NoSuchProviderException: JCE не может аутентифицировать поставщика BC. Обратите внимание, что я уже добавил этот код: Security.addProvider (новый BouncyCastleProvider ());

Это отлично работает с использованием встроенного tomcat с весенней загрузкой, но не при экспорте в файл войны, запущенный на сервере wildfly.

Вот как я объявляю пом.

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.58</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13</version>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.4.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk14</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcmail-jdk14</artifactId>
        </exclusion>
    </exclusions>
</dependency>

После создания файла войны, это список включенных библиотек:

  • bcmail-jdk14-138
  • bcprov-jdk14-138

bcpkix-jdk15on не включается, даже если я указываю его как указано

1
0
2 557
1

Ответы 1

Цитировать прямо из Документы Maven

provided

This is much like compile, but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.

Перефразируя, он использует .jar, помеченный как «предоставленный» для компиляции (и тестирования) вашего программного обеспечения, но когда вы его упаковываете, он не будет включен в .war: вы ожидаете, что система времени выполнения предоставит (предположительно разные) версии этих классов.

Попробуйте удалить изменение области этой зависимости на «компилировать», чтобы увидеть, решит ли это вашу проблему.

Хотя описание эффектов предоставлена верное, результатом его удаления будет сочетание артефактов BouncyCastle с разными версиями в пути к классам. Скорее всего, это вообще не сработает, в частности, между 1.38 и 1.58 произошел серьезный сбой API в BC.

mkl 31.10.2018 20:05

Что ж, в вопросе конкретно говорилось, что «bcpkix-jdk15on не включается, даже если я указываю его как предоставленный», что свидетельствует о непонимании того, что означает «предоставлено». Отдельно, если реальная проблема связана с адом Jar Jar BouncyCastle, то вопрос следует переписать, чтобы тот, кто знает больше о различных версиях BC, мог помочь.

dan.m was user2321368 01.11.2018 14:39

Другие вопросы по теме