Tag: rmi

编写安全的RMI服务器 – 客户端应用程序

我正在编写一个服务器客户端应用程序,通过互联网进行通信,我有几个关于安全性的问题和疑虑。 我做了一些研究,发现这里的一些post很有用,但我想了解更多信息。 我读到的一些相关问题是: 通过RMI安全validation客户端 java rmi身份validation和安全性。 exportObject使它公开? java rmi中的通信安全吗? 我有3个部分需要考虑: 客户端和服务器之间交换的信息。 客户端身份validation。 利用正在运行的RMI服务器(黑客等)。 我知道的: RMI over SSL。 使用SSL套接字而不是默认套接字将加密客户端和服务器之间传递的所有信息。 这包括对象交换和方法调用。 在建立RMI连接之前使用SSL上的用户名/密码组合进行身份validation。 根据我的理解,应该有一种在RMI连接内部进行身份validation的方法,但它被拒绝了。 不太确定这里可以或需要做什么。 我知道你不能只编写自己的客户端并要求连接到服务器,因为你需要一个ObjectID和远程接口。 但是,是否无法对您需要的类\接口进行反编译,因为无论如何它们都是在RMI中发送的? 我在研究时也看到了这个Youtubevideo[ http://www.youtube.com/watch?v=otjllNaBxiw]它让我担心它有多容易,虽然我不知道服务器是否设置不正确。 总而言之,我是否需要通过互联网在RMI中考虑其他安全问题? 我错过了一个我需要看的解决方案吗? 我已经知道错了吗?

RMI服务器exception

当我尝试运行使用远程注册表的服务器时,我从RMI获得以下exception。 我在Server2类中的主要方法的注册表编码是 Registry registry = LocateRegistry.getRegistry(“192.168.1.4”,1100); registry.rebind(“Hello”,stub); 192.168.1.4是同一局域网中的另一台机器。 请帮帮我。 Server2 exception:java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: example.Hello.RemoteHello2 java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: example.Hello.RemoteHello2 at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250) at sun.rmi.transport.Transport$1.run(Transport.java:159) at java.security.AccessController.doPrivileged(Native Method) […]

Android网络

我们正在实现一个服务器 – 客户端架构,一些客户端应用程序应该在Android操作系统上运行。 想到的第一个想法是使用java RMI,但显然没有为Android实现RMI api。 那么1)有没有办法在Android应用程序中使用java RMI api? 我可以从标准的Java库中导入它吗? 2)RMI的哪些替代品适用于Android和桌面应用程序? 谢谢。

java rmi中的通信安全吗?

java rmi中的客户端和服务器之间的通信是否安全(即默认加密)?

如何在RMI方法中传递参数中的对象?

我试图在RMI方法中添加参数。 当我添加例如String一切正常。 但我不确定我是否可以传递我创建的对象。 我是RMI的新手,所以我的代码非常简单: HelloIF public interface HelloIF extends Remote { String greeting(Context c) throws RemoteException; } 你好 public class Hello extends UnicastRemoteObject implements HelloIF { public Hello() throws RemoteException { } public String greeting(Context c) throws RemoteException { addToContext(c); report(c); return “greeting”; } void addToContext(Context c) { c.addID(Thread.currentThread().getId()); } void report(Context c) { System.out.println(“Hello.greeting() […]

Java套接字EOFException

我使用RMI和套接字在客户端集之间传输文件。 问题是当运行下面的代码有时我在客户端获得此exception: java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2671) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3146) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:858) at java.io.ObjectInputStream.(ObjectInputStream.java:354) at javafxcyberwind.serverSocket.run(serverSocket.java:38) at java.lang.Thread.run(Thread.java:748) 这是我的代码示例,例外情况在注释行中: 客户: Server_MethodsPEER S = (Server_MethodsPEER) Naming.lookup(“rmi://” + ip + “:” + port + “/” + email); Server_Methods R = S.peer(); R.uploadToServer(fileName); Socket s = new Socket(ip, R.getServerSocketPort()); File fres = new File(crep + fileName); FileInputStream inf = new FileInputStream(fres); […]

使用Java 7 Update 25的rmi线程中的AppContext为null

我们最近从Update 21更新到Java 7 Update 25,并且当从rmi线程调用SwingUtilities.isEventDispatchThread()时,现在遇到空指针exception,因为AppContext.getAppContext()返回null。 位于sun.awt.SunToolkit.getSystemEventQueueImplPP(未知来源)的sun.awt.SunToolkit.getSystemEventQueueImplPP(未知来源)的java.lang.NullPointerException,位于sun.awt.SunToolkit.getSystemEventQueueImpl(未知来源),位于java.awt.Toolkit.getEventQueue(来自sun.reflect的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的javax.swing.SwingUtilities.isEventDispatchThread(未知来源)的java.awt.EventQueue.isDispatchThread(未知来源)处的未知来源位于太阳的sun.rmi.server.UnicastServerRef.dispatch(未知来源)的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)sun.rmi.server.UnicastServerRef.dispatch(未知来源)的.NativeMethodAccessorImpl.invoke(未知来源)位于sun.rmi.transport.Transport.serviceCall的java.security.AccessController.doPrivileged(Native Method)的sun.rmi.transport.Transport $ 1.run(未知来源)的.rmi.transport.Transport $ 1.run(未知来源) (未知来源)at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown So urce)at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(Unknown Source)at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(Unknown Source)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown)来自java.lang.Thread.run的java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源)(未知来源) 此错误仅在Web启动时出现,当我们通过IDE运行我们的应用程序时,它很好。 还有其他人遇到过这个吗? 有关AppContext的最新更新中有什么变化的想法吗? 似乎其他人在更新后与AppContext有一些相关的问题: https ://forums.oracle.com/message/11077767#11077767

是否可以通过RMI中的引用传递?

我已经阅读了有关使用RMI传递变量的各种文章。 他们中的一些人说,通过RMI中的引用传递变量是不可能的。 例如: 这一个和这一个 而其他人说这是可能的。 例如: 这一个 , 这个和这一个 任何人都可以清楚这一点吗? 🙂

如何配置RMI环境以便我能够在“真实”网络中使用它?

因为我不想为基于客户端服务器的应用程序实现通信协议,所以我在两端都实现了RMI客户端和RMI服务器,以便在两个组件之间进行信息交换。 如果我尝试通过在同一台机器上启动两个组件来使用我的应用程序,一切正常。 但是,如果我将组件拆分为两台不同的计算机(Kubuntu 9.04作为具有禁用防火墙和本机Ubuntu 9.04环境的Windows 7 RC环境中的虚拟机),似乎RMI客户端无法执行以下方法:在服务器端定义。 (每个函数调用都会导致RMIexception。) 目前我只将网络接口两侧的系统属性“java.rmi.server.hostname”设置为应该用于数据交换的网络接口,并注册默认端口以与rmi守护进程(?)rmid进行通信。 有人知道会出现什么问题吗? 我是否必须设置一些其他参数,如“java.rmi.server.codebase”( http://java.sun.com/j2se/1.4.2/docs/guide/rmi/javarmiproperties.html )才能使用我的应用程序中的RMIfunction? 编辑:好的,这里有一些额外的信息: 在初始化阶段,我的客户端尝试建立与服务器组件的RMI服务器的连接,该服务器组件使用以下两种方法进行初始化: private void initialize() { // set ip address of rmi server System.setProperty(“java.rmi.server.hostname”, ipAddress); // try to register rmi server try { LocateRegistry.createRegistry(Registry.REGISTRY_PORT); } catch (Exception e) { // ignore } } public void start() { System.out.print(“starting master control RMI server […]

什么是“服务器”上的存根,骨架是什么意思?

存根在服务器端做什么? 什么是骨架 ? 这是维基百科的图表。 我在服务器计算机和客户端计算机上都安装了存根 。 我知道存根有助于客户端的网络连接,但是存根在服务器端做了什么? 在上图中骨架是什么意思?