RMI的安全问题

来源:互联网 发布:js添加数组中指定元素 编辑:程序博客网 时间:2024/05/19 04:52
天在测试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后正常。


这一切是为什么呢?
原创粉丝点击