我有一个“概念验证”项目涉及到一些陌生的领域。我的任务是将EFTPOS机连接到在我们内部网络浏览器中运行的应用程序。
我暂时忽略了EFTPOS dll,并使用我选择的编程语言(Delphi)创建了一个简单的JNI修饰DLL,它只是将一个字符串记录到c:\中的文本文件中,我可以成功地从本地Java应用程序调用它。
然而,当我创建一个applet来完成同样的事情,将其编译成.JAR,签名JAR并尝试通过网页上的Javascript调用applet中的方法时,它会失败。
我正在与一位高级Java人员合作,他认为这不可能实现,因为允许applet这样做本质上是“邪恶”的。
您可以在java.policy文件中放置一个条目以允许loadLibrary,以及allPermission,我已经尝试了许多类似这样的变化,但都没有成功,导致Java控制台中出现以下错误跟踪:
java.lang.ExceptionInInitializerError
at app.TestApplet.LogAString(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin.com.MethodDispatcher.invoke(Unknown Source)
at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.DLoggerImpl)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkLink(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at app.DLogger.<clinit>(Unknown Source)
... 16 more
java.lang.Exception: java.lang.ExceptionInInitializerError
at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
关键问题似乎是“Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.DLoggerImpl)”,这暗示着一个权限问题。可能是我在处理策略文件或签名时出错了,或者Java天生不允许Applet获得这些权限,因为存在安全风险。
我的问题是,我是否在浪费时间?这能行吗?如果可以,该怎么做?
谢谢您的期待。
Mike