上下文我正在编写一个Java系统,其中的代码在非常严格的沙箱中执行。一个查询(由一个或多个类组成)在执行期间只允许访问一个文件夹(以及文件夹中包含的子文件夹和文件)。我通过使用SecurityManager和每次查询执行一个新的ClassLoader来强制执行沙盒。当使用defineClass在ClassLoader中定义类时,我传递了一个包含应授予的文件读取权限的ProtectionDomain。由于并非调用堆栈上的所有对象都具有所需的权限,因此查询中的读取操作在AccessController.doPrivileged(...)block中运行。问题当我直接从doPrivilege
我正在开发一个库,该库需要实例化并返回从外部网站下载的不受信任的对象。在高层次上,该库的工作方式如下:库的客户从远程源请求一个类。我的库实例化该对象,然后将其返回给用户。这是一个主要安全风险,因为不受信任的代码几乎可以做任何事情。为了解决这个问题,我的图书馆有以下设计:我启用了SecurityManager,并且在实例化不受信任的对象时,我使用AccessController在没有特权的上下文中处理实例化。在将对象返回给客户端之前,我将对象包装在装饰器中,该装饰器使用AccessController将所有方法请求转发给底层对象,以确保不受信任的代码永远不会被访问使用任何权限运行。不过,
我在windows7x64上安装了jdkse32bit。对于Windows,位于“http://www.oracle.com/technetwork/java/javase/downloads/index.html”。我收到了这条错误消息。C:\Users\Administrator>javac-versionErroroccurredduringinitializationofVMjava.lang.ClassNotFoundException:errorinopeningJARfiled:\ProgramFiles(x86)\prg_java\jdk1.6.0_26\jre\lib
有什么方法可以使用AccessController.doPrivileged和新的AccessControlContext来限制对类/方法的访问?我想要一个可以调用不受信任的代码而无需访问文件系统或打开套接字的子例程。具体用例是,允许最终用户提供可以在有限权限下执行的代码或脚本片段(例如,Javascript或Groovy)。我要找的是类似于普通安全策略文件的东西,范围限定为用户提供的代码,而不是整个JVM。 最佳答案 我现在不了解AccessController方式。但也许您可以使用以下方案来控制情况。您将需要多个类加载器:首先将
我正在尝试了解java安全性和AccessController.doPrivileged()用法的基础知识我从一个示例程序开始importjava.security.AccessController;importjava.security.PrivilegedAction;publicclassAccessSystemProperty{publicstaticvoidmain(String[]args){System.out.println(System.getSecurityManager());AccessController.doPrivileged(newPrivilegedA
我正在尝试了解java安全性和AccessController.doPrivileged()用法的基础知识我从一个示例程序开始importjava.security.AccessController;importjava.security.PrivilegedAction;publicclassAccessSystemProperty{publicstaticvoidmain(String[]args){System.out.println(System.getSecurityManager());AccessController.doPrivileged(newPrivilegedA
我正在查看一个被大量从JavaScript调用的签名Applet。显然,与直接从Java内部启动的任何线程相比,源自JavaScript的线程受到更严格的沙箱化处理。例如,如果JavaScript线程调用Applet并记录导致日志文件滚动的内容,则会抛出安全异常。直接在Applet中启动的任何线程都不会遇到此安全异常。log4j的解决方案是使用异步附加程序。但是对于其他安全异常(exception)情况(例如,在已签名的Applet中但在JavaScript线程中使用ApacheAxis),没有明显的方法来拥有一些异步线程。假设我有以下代码,如果从Java线程调用将有效,如果通过Jav
我试图弄清楚一些遗留代码在做什么。这条线到底在做什么,为什么我需要这种方式?StringlineSeparator=(String)java.security.AccessController.doPrivileged(newsun.security.action.GetPropertyAction("line.separator"));我在Weblogic8上运行的web/ejb应用程序的记录器实现中发现了它。据我所知,没有启用任何特殊的安全策略。(我不喜欢从sun.*包导入,所以我想摆脱这一行;-) 最佳答案 它只是获取系统属性