gpt4 book ai didi

java - 无法为 Intranet 小程序配置 AllPermission。谁能帮忙?

转载 作者:行者123 更新时间:2023-11-30 07:38:29 27 4
gpt4 key购买 nike

经过大量阅读和测试后,我无法通过 codeBase 授予选项将所有权限授予 Intranet applet。此小程序需要完全权限,因为它必须访问 OCR 阅读器(也将图像文件写入硬盘)和其他此类外部设备的驱动程序库。

我已经配置了我的 java.policy 文件并添加了以下内容:


grant codebase "<a href="http://myIntranetServer/-" rel="noreferrer noopener nofollow">http://myIntranetServer/-</a>" {
permission java.security.AllPermission;
};

在控制台中重新加载策略文件,甚至重新启动浏览器后,我得到一个 java.security.AccessControlException:access denied for my many operations,包括读取“user.name”系统属性,这不是由默认。

为了调试,我也试过默认授予所有权限并且它有效,所以我的问题基本上与 de codeBase 选项有关。我正在运行带有 JRE1.6-u17 的 Windows 7 和 Linux 客户端,两者具有相同的行为。

有人能帮忙吗?

提前致谢

马德拉A

最佳答案

我不确定我是否正确理解了您最后的评论。当你陈述两个(对我而言)不同的事情时:

  • 您使用 plugin.jar(对我来说这意味着您的 java 调用 javascript 函数)
  • 我从 Javascript 调用相同的函数”(对我来说这意味着您的 javascript 调用 java 函数)

我认为后一种解释是正确的。

如果你只是调用 java 方法(通过 liveconnect),它不做任何与安​​全相关的事情,一切都很好。您可以直接在您的 javascript 代码中执行(假设小程序带有 id="myapplet")myapplet.safeMethod();

从 javascript 调用 java 方法的主要问题是调用 java 方法的主要问题是调用似乎在 JVM 中的不同上下文中运行,然后是 applet 本身。因此被视为非特权代码,您会得到 AccessControlException。虽然例如就像在我的其他答案中一样,由小程序本身执行的方法获得正确的权限并执行。

现在,如果您阅读此 LiveConnect Support in the New Java™ Plug-In Technology2.8 Security Model of JavaScript-to-Java Calls 部分太阳状态

When a JavaScript-to-Java call is made, the JavaScript code is modeled as though it were coming from an untrusted applet whose code origin is the document base (i.e., the URL of the directory containing the document).

我这样理解:如果小程序和 javascript 来自同一站点,则 javascript-to-java 调用应该以与小程序本身相同的权限运行。在我们的例子中,这意味着我们在 grant 中设置的任何权利。

但这只适用于我的 Opera。 FF 和 IE6 都抛出 AccessControlException。但它可能仍然适用于所有浏览器。

下面的代码有两个方法userName2()userName()userName2() 所有浏览器中的 WFM。 userName() 仅适用于 Opera。通过按 html 页面上的按钮进行检查。

如您所见,userName2() 不能像这样用于实际用例(只能调用一次)。但是您可以查看其他人在遇到类似问题时提出的解决方案,并相应地扩展 userName2()

Java Applet using LiveConnect

此外,您可能会考虑我没有尝试过的东西。所有从 javascript 到 java 的调用都不做任何与安​​全相关的事情,只是(如果需要)传递数据并立即返回。然后小程序执行实际工作(如上面显示的链接)。然后当完成时,小程序可以通过 JSObject (plugin.jar)

将回调触发到 html 页面中

测试应用程序.java

import java.applet.Applet;
import java.awt.*;
import java.security.AccessControlException;

public class TestApp extends Applet {
Label output = new Label("What is the value of user.name?");
String userName;
Thread access = new Thread() {
@Override
public void run() {
try {
userName = System.getProperty("user.name");
} catch (AccessControlException e) {
userName = "Oops, failed in thread. No read permissions!";
}
}
};
public void init() {
setLayout(new BorderLayout());
add(BorderLayout.CENTER, output);
}
public String userName2() throws InterruptedException {
access.start();
access.join();
output.setText(userName);
return userName;
}
public String userName() {
String userName = "Oops, failed in liveconnect-context. No read permissions!";
try {
userName = System.getProperty("user.name");
} catch (AccessControlException e) {
e.printStackTrace();
}
output.setText(userName);
return userName;
}
}

测试.html

<html><head><title>test</title></head><body>
<applet id="myapplet" code="TestApp" width="350px" height="80px"></applet><br>
<input type="button" value="liveconnect version" onclick="javascript:alert(myapplet.userName());"><br>
<input type="button" value="hacky thread version" onclick="javascript:alert(myapplet.userName2());">
</body></html>

策略:.java.policy(在 C:/Documents and Settings/[USERNAME]/中手动创建,请注意前导 )

grant codeBase "http://[domain].xxx/-" {
permission java.util.PropertyPermission "user.name", "read";
};

关于java - 无法为 Intranet 小程序配置 AllPermission。谁能帮忙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com