代码之家  ›  专栏  ›  技术社区  ›  bpapa

Java 1.5加密操作系统OX-Access控件异常

  •  1
  • bpapa  · 技术社区  · 15 年前

    我正在尝试在OSX上做一个谷歌应用引擎项目(最新和最好的)。我正在使用javax.crypto中的类,当我试图初始化mac类的实例时,我看到一个accessControlException抛出。这是堆栈跟踪:

    WARNING: Nested in java.lang.ExceptionInInitializerError:
    java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.keychain)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
        at java.security.AccessController.checkPermission(AccessController.java:427)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:76)
        at java.lang.SecurityManager.checkLink(SecurityManager.java:818)
        at java.lang.Runtime.loadLibrary0(Runtime.java:816)
        at java.lang.System.loadLibrary(System.java:993)
        at com.apple.crypto.provider.HmacCore.<clinit>(HmacCore.java:26)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
        at java.lang.Class.newInstance0(Class.java:350)
        at java.lang.Class.newInstance(Class.java:303)
        at java.security.Provider$Service.newInstance(Provider.java:1130)
        at javax.crypto.Mac.a(DashoA12275)
        at javax.crypto.Mac.init(DashoA12275)
    

    关于任何想法

    1-出了什么问题,如何解决

    2——如果它不是固定的(我知道苹果不是最近几年来Java的最佳支持者),那么另一种方法是什么?

    2 回复  |  直到 15 年前
        1
  •  1
  •   bpapa    15 年前

    找到一个解决办法 google groups :

    “要解决本地Mac SDK问题,可以通过 --jvm_flag=-d--对dev_appserver启用_all_permissions=true。本遗嘱 导致错误消失,但不幸的是也会禁用 在本地环境中进行安全检查。”

        2
  •  1
  •   32bits    15 年前

    我有一个更完整的答案,但是如果不能访问苹果的加密提供商源代码,我们永远无法完全确定他们所有平台上需要什么权限。我能为雪豹工作的是:

    您需要授予任何代码基需要加密的权限,如下所示:

    大代码库“你的/代码/库”{ 权限java.lang.runtimepermission“loadlibrary.keychain”; 允许JavaIO.FielSu允许“/系统/库/爪哇/扩展/ -”,“Read”; 允许JavaIO.FielSu允许“/库/爪哇/扩展/ -”,“Read”; 权限java.io.filepermission“/system/library/frameworks/javavm.framework/-”,“read”; };

    在Java 1.6的OSX.102.2框架目录中找到前两个位置的LIKEKCHANI.JNILB文件似乎有某种类型的搜索。其他版本的Java和OS的其他版本可能有附加或不同的搜索路径,因此解决每个平台的唯一方法是尝试查看安全权限异常,授予文件权限,然后再试一次,直到它工作。乐趣。

    一个重要的警告是,如果您尝试将加密库加载到一个不属于此代码基的类加载器中,然后尝试将其再次加载到另一个属于代码基的类加载器中,那么您将得到一个“本机库已加载到另一个类加载器”异常。