今天在测试RMI的时候,运行server端出现问题,命令如下:
D:\rmi>java -Djava.security.policy=
policy.txt RMIServer
其中policy.txt是策略文件--------------------------------------------------------------------------------------------------------------------
Exception in thread "RMI TCP Connection(2)-192.168.12.155" java.security.AccessC
ontrolException: access denied (java.net.SocketPermission 192.168.12.155:3576 ac
cept,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkAccept(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.checkAcceptPermi
ssion(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.checkAcceptPermission(Unknown Sour
ce)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Sour
ce)
at java.lang.Thread.run(Unknown Source)-------------------------------------------------------------------------------------------------------------------
此时,
policy.txt文件如下:
---------------------------------------------------------------------------------------
grant
{
permission java.net.SocketPermission "*:1099","accept,connect,listen";
};
--------------------------------------------------------------------------------------
修改为
--------------------------------------------------------------------------------------
grant
{
permission java.net.SocketPermission "*:*","accept,connect, listen";
};
-------------------------------------------------------------------------------------
后,运行正常。
问题二:直接运行命令,不加策略文件,会出错
D:\rmi>java RMIServer
错误如下:
--------------------------------------------------------------------------------------
Exception in thread "main" java.security.AccessControlException:
access denied (
java.net.SocketPermission 192.168.12.155:1099 connect,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
ource)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
ource)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(
Unknown Source)
at RMIServer.<init>(RMIServer.java:75)
at RMIServer.main(RMIServer.java:37)
---------------------------------------------------------------------------------------------
运行java -Djava.security.policy=
policy.txt RMIServer后正常。
这一切是为什么呢?
分享到:
相关推荐
- **异常处理**:RMI调用可能遇到网络中断、远程对象不存在等问题,因此客户端需要适当地捕获和处理`java.rmi`包下的异常,如`RemoteException`。 3. **RMI通信机制**: - **marshalling**与**unmarshalling**:...
- **安全性**:RMI可以通过SSL/TLS加密通信,并且可以使用Java的安全管理器来控制访问权限。 - **动态导出和导入**:服务器可以在运行时动态地导出或导入远程对象,提供更大的灵活性。 学习和理解Java RMI对于开发...
【RMI+EHCACHE Demo】是一个面向初学者的示例项目,旨在帮助理解如何结合Remote Method Invocation(远程方法调用)和Ehcache缓存技术。这个Demo将展示如何利用RMI来创建分布式系统,并利用Ehcache进行高效的数据...
此外,RMI还涉及到安全性问题,因为远程对象可能会执行敏感操作。Java RMI支持通过JVM的安全管理器设置权限,以限制远程对象的访问和行为。 总之,Java RMI是构建分布式Java应用的重要工具,它简化了网络通信的复杂...
为了提高RMI通信的安全性,我们可以使用SSL (Secure Sockets Layer) 或其后继者TLS (Transport Layer Security) 进行加密。SSL加密确保了数据在传输过程中不被窃取或篡改,这对于处理敏感信息如JMX (Java Management...
- `java.rmi.RemoteException`是最常见的RMI异常,通常表示网络或序列化问题。 - `NotBoundException`表示试图查找的远程对象未在注册表中找到。 6. **性能优化**: - 使用持久化的RMI注册表,减少启动时的绑定...
- 安全性:RMI允许跨网络调用,因此需要考虑身份验证和授权。可以通过SSL/TLS加密通信,或者使用Java的Security Manager来增强安全性。 - 性能优化:减少序列化开销,使用高效的数据结构,以及合理地设计远程方法以...
以下是对Java RMI的详细解释以及一些常见问题的解答。 ### 1. RMI基本概念 RMI的核心是远程接口(Remote Interface),它定义了可以在远程对象上调用的方法。这些方法的实现位于远程服务器上,客户端通过调用这些...
3. 安全性问题,如何在RMI调用中处理身份验证和加密,以防止未授权访问。 4. 性能优化,探讨如何通过负载均衡和缓存策略提高Web服务器在处理RMI请求时的效率。 5. 故障排查和监控,如何诊断RMI连接问题,以及如何...
- **安全性**: 默认的安全机制较弱,需要额外的配置和管理。 - **网络依赖**: RMI应用对网络的稳定性和性能有较高要求。 - **故障恢复**: 当远程对象或网络出现问题时,恢复机制不够完善。 在实际应用中,开发者...
- **安全性**:可以通过SSL或其他安全协议进行加密,确保数据传输的安全。 - **异常处理**:RMI系统会把远程抛出的异常包装成`RemoteException`传递给客户端。 5. **RMI示例** - 一个简单的RMI应用可能包括一个...
5. **RMI 安全性**:标签中提到了“rmi_policy.all”,这通常是指RMI的安全策略文件,用于控制RMI应用程序的权限。通过设置策略文件,可以限制远程对象的操作,确保系统的安全性。 6. **部署和运行**:使用RMI时,...
10. **部署与配置**:RMI应用需要正确配置JVM的RMI服务,包括设置RMIREGISTRY端口、JDK的`.policy`文件以指定安全策略,以及可能的防火墙或安全组规则。 在“基于RMI的远程控制”项目中,开发者可能创建了一个包含...
3. 安全:基于Java的安全模型,可以进行细粒度的权限控制。 缺点: 1. 只支持Java:RMI是Java特有的,跨语言支持较差。 2. 性能限制:由于Java的序列化和反序列化过程,对于大数据量的传输可能效率较低。 3. 网络...
Spring Remote Method Invocation(RMI)是Java平台上的一个远程对象调用框架,它允许一个Java对象在一台机器上...在实际项目中,我们可以根据需要添加事务管理、安全控制等高级特性,进一步提升系统的灵活性和稳定性。
Java RMI(Remote Method Invocation)技术是Java平台中用于分布式计算的一种机制,它允许一个Java对象调用远程...通过这个项目,开发者可以学习到如何使用RMI创建分布式应用,以及如何处理并发和网络通信等问题。
6. **安全性**:RMI提供了安全机制,如SSL/TLS加密,以及通过Java安全管理器进行权限控制。用户可以自定义安全策略来限制远程对象的访问。 7. **启动RMI服务**:在服务器端,需要通过 `rmiregistry` 工具启动RMI...
这个简单的例子展示了Spring RMI的基本用法,但实际应用中可能需要考虑更多因素,如安全性、事务管理、异常处理等。通过Spring RMI,我们可以轻松地构建可扩展的分布式系统,利用其强大的特性来提升系统的灵活性和...
Java RMI(Remote Method Invocation,远程方法调用)是一种...总的来说,理解Java RMI反序列化漏洞及其危害至关重要,同时利用如`attackRMI.jar`这样的工具进行定期检测,可以帮助识别并及时修补这些潜在的安全隐患。