我想动态下载课程;在下面我写了相同的代码。
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")
我尝试过多次试验,但没有成功。
答案 0 :(得分:1)
如果您要安装java.security.policy
,则需要定义SecurityManager.
文件。否则您将无法执行任何操作。请参阅Oracle RMI教程。