代码之家  ›  专栏  ›  技术社区  ›  Pedro d'Aquino

如何从未签名的JavaScript调用一个带签名的Java applet来执行特权操作?

  •  7
  • Pedro d'Aquino  · 技术社区  · 17 年前

    JavaApplet与在客户端运行的普通Java应用程序具有相同的安全性。对于一个特定的项目,我 需要 这些权限,我 需要 在javascript调用后执行特权操作。

    现在,问题是,至少对于Ubuntu(目标浏览器和平台)中的firefox 3,当通过未签名的javascript调用applet方法时,它会失去其特殊权限。由于签署javascript不是一个选项,我需要一种方法来解决这个限制。

    实现这一点的一种方法是在小程序启动时创建一个线程,并在主线程接收到JavaScript调用时调用该线程上的方法。我已经实现了这个想法的一个工作原型,但是我发现它有点笨拙,因为它使用了太多的反射,并且不像我想要的那样容易重用。

    有没有一个共同的,标准的方式来做我想做的?而且,如果我的想法是正确的方式,那么您将如何以可重用的方式实现它呢?我正在尝试实现的是一个框架,它允许将这个“运行方法在特权线程中”的东西用于各种对象。理想的自动解决方案是:

    // when the applet starts-up
    PrivilegedExecuter priv = new PrivilegedExecuter(myObject); //or MyClass.class
    // ...
    // inside a JavaScript-called method (myObject has myMethod)
    priv.myMethod(); // myMethod is run synchronously in a privileged thread
    
    2 回复  |  直到 13 年前
        1
  •  8
  •   David Nouls    17 年前

    使用java.security.accessController类。

    有一个DoPrivilegedAction和DoPrivilegedExceptionAction可以完全满足您的需要。

    例如:

    AccessController.doPrivileged(new PrivilegedAction() {
                public Object run() {
                   .. do something that only works with signed applets ..
                }
            });
    
        2
  •  0
  •   Ti Strga    13 年前

    值得一提的是:让你的私生活 run() 方法尽可能小且独立。显然,您可以让签名的applet的init()方法调用一个特权 () 这反过来又是实际的小程序,但这只是乞求被滥用,误用,或直接利用。

    另外,当被javascript调用时,签名的小程序会失去它们的特殊权限,这一事实并不特定于特定的浏览器或平台。这就是它的样子,无论何时何地。