今天在测试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+EHCACHE可以做基础学习理解
3. 安全:RMI 使用 Java 内置的安全机制保证下载执行程序时用户系统的安全。 4. 便于编写和使用:RMI 使得 Java 远程服务程序和访问这些服务程序的 Java 客户程序的编写工作变得轻松、简单。 5. 可连接现有 / 原有的...
我最近在研究JMX,底层通过RMI传输,为了数据安全,需要SSL加密.我成功试验了本地及远程的传输方法.希望对大家有些帮助.
由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发企业分布式应用提供了行之有效的...
基于RMI的审计记录系统的设计与实现,熊飞,龙毅宏,随着Internet的迅速发展,企业对网络信息系统依赖程度越来越高,同时信息安全系统也存在着各种安全问题,其中内部人员的违规操作导�
// 暂时不要安全设置, } catch (java.rmi.RMISecurityException exc) { throw exc; } }*/ } /* * set the remote method */ public void setDataAllFace(AllFace dataAllFace) { this....
Java安全漫谈 - 04.RMI篇(1)1
RMI-JAVA- 远程方法调用的加密安全性
这是用Java RMI机制实现的一个模拟时钟,服务器端设置Timer,客户端只是被动接受数据进行显示.RMI的安全策略机制在代码中实现。
原因是,通常我们在新建一个RMI Registry的时候,都会直接绑定一个对象在上面,也就是说我们示例代码中的Server其实包含了Registry和Serve
JavaRMI.pdf
由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发企业分布式应用提供了行之有效的...
通过这个例子可以大概了解RMI的很多机制
RMI学习资料.doc
基于RMI的分布式时间服务器,这是一个Eclipse下的工程文件,由于加了安全策略文件,另外给出了运行程序的批处理文件,在\bin目录下。
weblogic下开发客户端需要的全部jar包的集合包括,其中有rmi,jms,ejb3等重要的库,欢迎下载
此时我们还得借助Java序列化的协议文档:https://docs.oracle.com/javase/8/docs/platform/serializatio
java教学课件:10Java--RMI.ppt