Как мне использовать Maven для установки файлов JCE Unlimited Strength Policy?

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

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

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


person Jeff Martin    schedule 06.08.2010    source источник


Ответы (3)


Вы могли бы попробовать это:

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

Я нашел этот ответ, когда поискал в Google зависимости 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);
    }
person Bart Prokop    schedule 29.11.2013
comment
Спасибо, Барт, это сэкономило мне время. - person shashaDenovo; 05.11.2015
comment
Привет, Барт, с обновлением до java1.8 это решение перестало работать. Вы знаете аналогичный трюк и для Java1.8? - person shashaDenovo; 09.12.2015
comment
Привет, я использую Java 1.8.0_25 на OSX, и она все еще работает. - person Marcel; 05.04.2016
comment
Это потому, что javax.crypto.JceSecurity.isRestricted стал окончательным bugs.openjdk.java.net/ browse / JDK-8149417 - person Barak Kedem; 06.11.2016
comment
@shashaDenovo В этой ветке есть новое решение от Андрея Караыванского для Java 1.8 - person notes-jj; 08.02.2017

Взлом безопасности Java 8

    // 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);
person Andrii Karaivanskyi    schedule 06.01.2017
comment
Я использую java 1.8.0_102. У меня не работает :( - person Max Peng; 25.08.2017