为什么可以';当通过JavaScript访问方法时,我的小程序是否加载本机库?
我有一个用于扫描文档的小程序(使用JTwain)。我的applet由我编写的一个jar、两个第三方jar和一个dll(包装在jtwainjar中)组成。我打算加载applet,然后使用JavaScript访问applet方法。但是,当我执行此操作时,会出现安全异常:为什么可以';当通过JavaScript访问方法时,我的小程序是否加载本机库?,javascript,security,applet,loadlibrary,Javascript,Security,Applet,Loadlibrary,我有一个用于扫描文档的小程序(使用JTwain)。我的applet由我编写的一个jar、两个第三方jar和一个dll(包装在jtwainjar中)组成。我打算加载applet,然后使用JavaScript访问applet方法。但是,当我执行此操作时,会出现安全异常: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.AspriseJTwain) at j
java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.AspriseJTwain)
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 com.asprise.util.jtwain.SourceManager.init(SourceManager.java:222)
at com.asprise.util.jtwain.SourceManager.<init>(SourceManager.java:36)
at com.asprise.util.jtwain.SourceManager.instance(SourceManager.java:28)
at co.altcom.cache.scanner.CacheScan.scanToPDF(CacheScan.java:91)
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.GeneratedMethodAccessor3.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.plugin2.liveconnect.JavaClass$MethodInfo.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke0(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
java.security.AccessControlException:拒绝访问(java.lang.RuntimePermission loadLibrary.AspriseJTwain)
位于java.security.AccessControlContext.checkPermission(未知源)
位于java.security.AccessController.checkPermission(未知源)
位于java.lang.SecurityManager.checkPermission(未知源)
位于java.lang.SecurityManager.checkLink(未知源)
位于java.lang.Runtime.loadLibrary0(未知源)
位于java.lang.System.loadLibrary(未知源)
位于com.asprise.util.jtwain.SourceManager.init(SourceManager.java:222)
位于com.asprise.util.jtwain.SourceManager。(SourceManager.java:36)
位于com.asprise.util.jtwain.SourceManager.instance(SourceManager.java:28)
位于co.altcom.cache.scanner.CacheScan.scanToPDF(CacheScan.java:91)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于sun.plugin.javascript.JSInvoke.invoke(未知源)
位于sun.reflect.GeneratedMethodAccessor3.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于sun.plugin.javascript.JSClassLoader.invoke(未知源)
位于sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(未知源)
位于sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(未知源)
位于sun.plugin2.liveconnect.JavaClass.invoke0(未知源)
位于sun.plugin2.liveconnect.JavaClass.invoke(未知源)
位于sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(未知源)
位于sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(未知来源)
位于sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(未知源)
位于java.lang.Thread.run(未知源)
让我感到困惑的是,我可以在appletsinit方法中运行这些函数(没有例外-applet扫描并保存到计算机文件系统)。只有当JavaScript访问它们时,它们才会失败。我猜我需要制定一些政策,但我找不到任何关于它的信息
有什么想法吗?将JS调用的代码包装在一个
AccessController.doPrivileged(PrivilegedAction)
(或重载变体)中。太棒了。正是我想要的。谢谢你。