我想动态下载类;下面我编写了相同的代码。
public class ClientProg {
public static void main(String[] args) throws ClassNotFoundException, MalformedURLException {
String serverName = "localhost";
int port = Integer.parseInt("3000");
SerialObj so = null;
SecurityManager securityManager = null;
securityManager = System.getSecurityManager();
if(securityManager == null) {
System.setSecurityManager(new SecurityManager());
}
RMIClassLoader.loadClass("http://localhost:80", "SerialObj.class");
try
{
Socket client = new Socket(serverName, port);
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
so = (SerialObj) ois.readObject();
System.out.println("read object is : " + so.getId() + ", " + so.getName());
client.close();
} catch(IOException e)
{
e.printStackTrace();
}
}
}
基本上我尝试使用 RMIClassLoader 获取类,类位于 http 服务器中的某个位置,这是很容易访问的。
以下是我授予的安全权限:
grant {
permission java.security.AllPermission;
};
当我运行此程序时,出现以下异常(未显示完整堆栈)。
access: access denied ("java.net.SocketPermission" "localhost:80" "connect,resolve")
这也在堆栈输出中:
Caused by: java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:80" "connect,resolve")
我尝试了多次尝试来解决这个问题,但没有成功。
最佳答案
如果要安装SecurityManager,则需要定义
否则您将无法执行任何操作。请参阅 Oracle RMI 教程。java.security.policy
文件。
关于java - 动态下载 .class 时出现 AccessControl 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808987/