Java 如何使用Maven安装JCE无限强度策略文件?

Java 如何使用Maven安装JCE无限强度策略文件?,java,maven-2,jce,Java,Maven 2,Jce,我的一些代码需要JCE无限强度策略文件。我想将此依赖项添加到Maven Pom文件中,这样团队中的其他开发人员就不必各自将其应用到他们的系统中 我意识到最终部署到的系统需要手动安装JCE文件。这只是一个开发解决方案 我原以为我们会将策略文件添加到我们的存储库中,maven将能够处理安装,但我感到惊讶的是,我找不到其他人这样做(并为此写博客)。您可以尝试以下方法: 捆绑(zip?)JCE无限强度策略文件 将它们作为zip依赖项安装到公司存储库中 使用目标将创建的依赖项解压到${java.home

我的一些代码需要JCE无限强度策略文件。我想将此依赖项添加到Maven Pom文件中,这样团队中的其他开发人员就不必各自将其应用到他们的系统中

我意识到最终部署到的系统需要手动安装JCE文件。这只是一个开发解决方案


我原以为我们会将策略文件添加到我们的存储库中,maven将能够处理安装,但我感到惊讶的是,我找不到其他人这样做(并为此写博客)。

您可以尝试以下方法:

  • 捆绑(
    zip
    ?)JCE无限强度策略文件
  • 将它们作为
    zip
    依赖项安装到公司存储库中
  • 使用目标将创建的依赖项解压到
    ${java.home}/jre/lib/security
    ,作为构建的一部分,例如在
    初始化期间(请参阅)

我在谷歌搜索策略jar的Maven依赖项时发现了这个答案,并意识到它是特定于JRE安装的,因此作为Maven build的一部分修复它只对开发人员有效,并且只有在您拥有/JRE/lib/security文件夹的权限时才有效。对我来说,以下代码破解工作得更好(将其作为应用程序执行的第一件事情之一调用):

Java8安全黑客

    // 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);

谢谢Bart,这节省了我的时间。嗨Bart,随着java1.8的更新,这个解决方案停止工作了。你也知道Java1.8的类似技巧吗?嗨,我在OSX上使用Java1.8.0_25,它仍然有效。这是因为javax.crypto.JceSecurity.isRestricted成为final@shashashadenovo在这个线程中,Andrey Karayvansky为Java1.8提供了一个新的解决方案我正在使用
Java1.8.0_102
。这对我不起作用:(
    // 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);