java - 无法为 Intranet 小程序配置 AllPermission。有人可以帮忙吗?

标签 java permissions plugins codebase

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

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

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

在控制台中重新加载策略文件,甚至重新启动浏览器后,我的许多操作都收到 java.security.AccessControlException:访问被拒绝,包括读取未经授权的“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 方法(通常只对 applet 执行某些操作)的主要问题是,这些调用似乎在 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).

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

但这只对我来说在 Opera 中有效。 FF 和 IE6 都会抛出AccessControlException。但它可能仍然适用于所有浏览器。

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

正如您所看到的,userName2() 对于真正的用例来说是不可用的(只能调用一次)。但是您可以研究其他人在遇到类似问题时提出的解决方案,并相应地扩展 userName2()

Java Applet using LiveConnect

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

向 html 页面发起回调

TestApp.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/

相关文章:

java - 如何在 javascript 方法中访问 HashMap 值?

ios - macOS 应用程序崩溃并且不提示相机权限

c# - 如何检查当前用户是否有权重新启动 Windows 服务?

eclipse - Grails-开发建议-在哪里可以找到插件API/对错误进行疑难解答/让自己的生活更轻松

javascript - SumoSelect 处理事件不适用于 Android 设备

java - 分别检测文本文件的第一行?

java - 运算符不存在 : integer = character varying

java - 在 maven jaxb codegen 期间将 DTMManagerDefault 转换为 DTMManager 的 ClassCastException

php - 从 PHP 和设置权限在 phpBB3 中创建论坛

jquery - 使用 ('change' jQuery 插件设置选择标签样式时,在 "nice-select"上获取选择标签 .val() 不起作用