java -d参数 和 policy文件的问题

KG071 2011-10-07 01:41:48
学习RMI,程序中有System.setSecurityManager(new RMISecurityManager());这样的代码,所以我设置了policy文件,文件的内容为:
grant {
permission java.security.AllPermission;
};

然后我在命令行下运行程序:
E:\test\rmi\server>java -Djava.security.policy=RMIpolicy.policy;-Djava.rmi.server.codebase=file:/.\/ UpperImpl
Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099
connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at java.net.Socket.connect(Socket.java:524)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:160)
at UpperImpl.main(UpperImpl.java:17)

因为权限问题报错,我估计是我的policy文件的问题,所以我特意在policy文件里加了一些杂乱的字母,然后再执行,还是报上面的错。肯定是policy文件的问题了。为什么policy文件会无效? -d参数是按;还是空格隔开?我用空格不行 希望有人能帮忙解释下
...全文
173 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevinmy 2011-10-09
  • 打赏
  • 举报
回复
帮顶!我也想了解
KG071 2011-10-08
  • 打赏
  • 举报
回复
这个问题解决了

是用空格分隔的 然后写绝对路径

然而出新的问题:UpperImpl_Stub.class是在服务器端的,在目录/server下
我执行E:\test\rmi\client>java -Djava.security.policy=RMIpolicy.policy UpperClient
出现如下错误:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: UpperImpl_Stub
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:84)
at UpperClient.main(UpperClient.java:17)
Caused by: java.lang.ClassNotFoundException: UpperImpl_Stub
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:434)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
... 3 more

难道要把UpperImpl_Stub.class拷贝到/client下吗?如果那样还是远程调用吗?不知道这个该怎么解决
KG071 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huntor 的回复:]

空格
内容太短了
[/Quote]

什么叫内容太短了?
KG071 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ticmy 的回复:]

file:/.\/ UpperImpl

file协议的路径看着不像这样

用绝对路径试试?
[/Quote]

用绝对路径也是一样的错误
shupo 2011-10-08
  • 打赏
  • 举报
回复
用绝对路径试试
龙四 2011-10-07
  • 打赏
  • 举报
回复
file:/.\/ UpperImpl

file协议的路径看着不像这样

用绝对路径试试?
huntor 2011-10-07
  • 打赏
  • 举报
回复
空格
内容太短了
TKD03072010 2011-10-07
  • 打赏
  • 举报
回复
没接触过
帮顶

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧