Подтвердить что ты не робот

Как я могу использовать Maven для установки файлов политики неограниченной прочности JCE?

В некотором коде, который у меня есть, требуются неограниченные файлы политики прочности. Я хотел бы добавить эту зависимость в файл Maven Pom, чтобы другим разработчикам моей команды не приходилось индивидуально применять их к своим системам.

Я понимаю, что для систем, которые в итоге будут развернуты, необходимо будет установить файлы JCE вручную. Это только решение для разработки.

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

4b9b3361

Ответ 1

Возможно, вы можете попробовать следующее:

  • Bundle (zip?) файлы политики неограниченной силы JCE.
  • Установите их в корпоративный репозиторий как зависимость zip.
  • Используйте dependency:unpack, чтобы распаковать созданную зависимость на ${java.home}/jre/lib/security как часть вашей сборки, например. во время initialize (см. Распаковка определенных артефактов).

Ответ 2

Я нашел этот ответ, когда искал для зависимостей Maven для JAR политики и понял, что он установлен специально для JRE, поэтому исправление этого как часть сборки Maven будет работать только для разработчиков и только тогда, когда у вас есть права на /jre/lib/security. Для меня следующий код взлома работает намного лучше (вызывают это как одну из первых вещей, которые делает ваше приложение):

    try {
        Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted");
        field.setAccessible(true);
        field.set(null, java.lang.Boolean.FALSE);
    } catch (ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) {
        ex.printStackTrace(System.err);
    }

Ответ 3

Java 8 security hack

    // hack for JCE Unlimited Strength
    Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted");
    field.setAccessible(true);

    Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

    field.set(null, false);