面朝大海,春暖花开


黑夜给了我黑色的眼睛,
我却用它寻找光明

逝者如斯
网志分类
· 所有网志
· 思绪零乱
· 为了忘却的纪念
· Lost In A Moment
· 编程&生活
· 一些好音乐
· 未分类
搜索本站
友情链接
· 管理博客
· *新奇士*

订阅 RSS

0016643

歪酷博客


« 上一篇: 需求变更 下一篇: Nothing can crushes us »
sunshine17 @ 2008-02-28 21:28

 
       研究了三天,今晚在得知时间的紧迫性的情况下,我终于解决了RMI运行时出现的
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)异常这个问题。


        原因很简单,RMI Server/Client程序试图通过Socket连接访问本机的rmiregistry服务(即RMI的Naming Service,其运行的默认端口是1099)。要解决这个问题,可以在运行Server/Client时指定一个Policy文件。在我的机上命令如下(engine.ComputeEngine为要运行的Server class文件):


        D:\My_Projects\Eclipse\RMI_ComputEngine\bin>java -Djava.security.policy=server.policy engine.ComputeEngine
      

        这种方法在网上早已被N个人提出过,但其实关键并不在方法本身,本是那个policy文件。Java Tutorial中对policy文件写法的介绍是这样的:
grant codeBase "file:/home/ann/src/" {
    permission java.security.AllPermission;
};



但事实上这种写法有一点点小问题,就是在permission java.security.AllPermission
后漏了两个双括号,即" " , " "。别看少这两个双括号,我就是因为忽略了它们想了两天
都不得其解。正确的policy文件应该是如下所示:
       grant codeBase "file:/home/ann/src/" {
               permission java.security.AllPermission " ", " "
;
        };

   

        其中第一个双括号用来指定被grant permission的电脑URL及端口号范围,例如 "localhost:1024-",而第二个双括号则指定被grant的操作,例如 " accept , connect, listen, resolve " 等。两个都双括号内都只有一个空格则说明指定为本地主机的所有端口及所有可以grant的操作,这是最方便的


        经过我无数次严格的测试,这是我所了解的解决access denied最简单的方法,期待有高手介绍更好的方法,呵呵。
        




最新评论


swell

2008-07-18 15:31 匿名 211.100.*.*

其实跟后面两项指定与否无关。

根源在于不能使用
System.setSecurityManager(new SecurityManager());


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定