【发布时间】:2014-10-15 17:52:21
【问题描述】:
我正在从 Javascript 调用 Java 小程序。 Java 代码需要在特权模式下运行(最终它将显示一个文件选择器,该选择器将显示来自本地硬盘的文件)。 Javascript 调用返回java.lang.reflect.InvocationTargetException。任何关于如何让此代码工作的想法,或任何调试技术以获取有关它失败原因的更多信息,我们将不胜感激。
这是 Java 类。我已经删除了所有不必要的代码以试图揭示实际问题。
// Java code
public class OHLib extends Applet {
public String getFile() {
String result;
try {
// this code does NOT generate an exception
result = (String) AccessController.doPrivileged(new PrivilegedAction() {
public String run() {
// JFileChooser code will go here
return "xxx";
}
});
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
我没有从上面的 try/catch 块中得到任何异常信息。
以上代码由JavaScript调用,如下:
// JavaScript code
function BrowseForFile() {
var x;
try {
// this code generates InvocationTargetException
x = ohApplet.getFile();
} catch (e) {
console.log(e);
}
}
上面的代码是我得到InvocationTargetException 的地方。
小程序在我的网页上部署如下:
<script src="/plugins/deployJava.js"></script>
<script>
var attributes = {
id:'ohApplet',
code:'OHLib',
codebase: 'java',
archive: 'OHLib.jar',
width:1,
height:1,
} ;
var parameters = {
jnlp_href: 'OHLib.jnlp',
classloader_cache: 'false',
} ;
deployJava.runApplet(attributes, parameters, '1.6');
小程序位于签名的 jar 文件中,具有以下清单:
Application-Name: <appname>
Permissions: all-permissions
Codebase: <domain>.dev <domain>.com
Caller-Allowable-Codebase: <domain>.dev <domain>.com
Application-Library-Allowable-Codebase: <domain>.dev <domain>.com
JNLP文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
<information>
<title>...</title>
<vendor>...</vendor>
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version="1.8+" href="http://java.sun.com/products/autodl/j2se" />
<jar href="OHLib.jar" main="true" />
</resources>
<applet-desc
main-class="OHLib"
name="OHLib"
width="1"
height="1">
</applet-desc>
</jnlp>
任何关于如何让此代码工作的想法,或任何调试技术以获取有关它失败原因的更多信息,我们将不胜感激。
【问题讨论】:
标签: java javascript applet elevated-privileges