如何让已签名的Java Applet在被未签名的Javascript调用时执行特权操作?

7
签名的Java小程序具有与在客户端上运行的普通Java应用程序相同的安全权限。对于一个特定的项目,我需要这些权限,并且需要作为JavaScript调用的结果执行特权操作。
问题在于,至少对于Ubuntu中的Firefox 3(目标浏览器和平台),当未签名的JavaScript通过调用小程序方法时,它将失去其特殊权限。由于签署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个回答

8
使用java.security.AccessController类。
有一个doPrivilegedAction和doPrivilegedExceptionAction,它们可以完全满足您的需求。
例如:
AccessController.doPrivileged(new PrivilegedAction() {
            public Object run() {
               .. 做一些只适用于已签名小程序的事情 ..
            }
        });

0
值得注意的是:尽可能使您的特权run()方法小而自包含。显然,您可以让签名的小程序的init()方法调用特权的run(),然后再执行实际的小程序,但这只是恳求被滥用、误用或明目张胆地利用。
另外,签名小程序在被JavaScript调用时失去其特殊权限并不特定于任何浏览器或平台。这就是它的样子,在任何地方,任何时候。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接