2
我需要一个RMI注册表,使服务可以从我的机器外部访问,同时仍然可以拒绝基于客户端IP的连接。下面的代码使注册表只能从我的机器访问,但永远不会进入“的RMIClientSocketFactory”代码:LocateRegistry.createRegistry
LocateRegistry.createRegistry(uri.getPort(), new RMIClientSocketFactory() {
@Override
public Socket createSocket(String host, int port) throws IOException {
System.out.println("RMIServerSocketFactory().createSocket()");
InetAddress addr = InetAddress.getByName(host);
if (addr.equals(InetAddress.getLocalHost())) {
return new Socket(addr, port);
} else {
throw new IOException("remote socket bind forbidden.");
}
}
}, new RMIServerSocketFactory() {
@Override
public ServerSocket createServerSocket(int port) throws IOException {
System.out.println("RMIServerSocketFactory().createServerSocket()");
return new ServerSocket(port, 0, InetAddress.getByName("127.0.0.1"));
}
});
所以它运行“的RMIServerSocketFactory”,并结合环回,但从来没有验证客户端IP。 欢迎任何帮助,非常感谢!
谢谢你的回复!它只是我还是implAccept标记为最终?你能否添加一些更多的信息?谢谢 ! – AndrewBourgeois 2011-03-10 18:59:11
@iDemmel你说得对,我误解了文档,它是'accept()',你应该重写。 – biziclop 2011-03-10 19:04:07
public socket accept()throws IOException {true} {socket} socket = super.accept(); String ip = socket.getInetAddress()。getHostAddress(); (ip.equals(“192.168.2.246”)|| ip.equals(“127.0.0.1”)){ return socket; } socket.close(); } } – AndrewBourgeois 2011-03-10 20:10:45