RMI 如何添加库(并授予它们套接字权限)
Posted
技术标签:
【中文标题】RMI 如何添加库(并授予它们套接字权限)【英文标题】:RMI How to add libs (and grant them socket permissions) 【发布时间】:2011-05-29 20:02:08 【问题描述】:对于一个学校项目,我必须从一个独立的应用程序创建一个分布式系统。我们使用 RMI 进行通信,但遇到了一些问题。
我创建的服务器启动得很好,但是客户端(它使用了一些 Swing 库等)给了我一个 classNotFound 异常。为了解决这个问题,我将我的项目使用的库添加到“C:\Program Files\Java\jre6\lib\ext”。我更喜欢在客户端放置库(就像我对构建所做的那样)。
谁能告诉我这是否可行,如果可行,如何?
问题不止于此,如果我现在启动客户端,我会收到 java.security.AccessControlException。我使用一个策略文件,它看起来像这样:
grant
permission java.net.SocketPermission
"*:1024-65535", "connect,accept";
;
我也尝试添加所有库,但这也无济于事:
grant codebase "file:$java.home/../lib/ext/appframework-1.0.3.jar"
permission java.security.AllPermission;
;
grant codebase "file:$java.home/../lib/ext/beansbinding-1.2.1.jar"
permission java.security.AllPermission;
;
grant codebase "file:$java.home/../lib/ext/jcalendar-1.3.3.jar"
permission java.security.AllPermission;
;
grant codebase "file:$java.home/../lib/ext/looks-2.0.1.jar"
permission java.security.AllPermission;
;
grant codebase "file:$java.home/../lib/ext/swing-worker-1.1.jar"
permission java.security.AllPermission;
;
grant codebase "file:$java.home/../lib/ext/swingx-1.6.1.jar"
permission java.security.AllPermission;
;
grant codebase "file:$java.home/../lib/ext/swingx-bean.jar"
permission java.security.AllPermission;
;
grant codebase "file:$java.home/../lib/ext/swingx-ws-2011_01_16.jar"
permission java.security.AllPermission;
;
grant
permission java.net.SocketPermission
"*:1024-65535", "connect,accept";
;
我希望任何人都可以帮助我。
-罗伯
【问题讨论】:
【参考方案1】:调试 java 2 安全异常是一个繁琐的试错过程。我猜您正在使用 JVM 开关启动客户端以添加告诉它使用安全管理器 - 添加以下内容
-Djava.security.debug=access,failure
您将获得大量调试信息,但搜索“拒绝访问”会显示需要针对哪个代码库授予哪些权限。这不是一个科学的过程——你只需要不断尝试,直到你认为你已经解决了所有的安全问题。
【讨论】:
谢谢,当我们超过最后期限时,我会试一试(需要做很多工作,所以最好先让它全部正常运行)【参考方案2】:grant
permission java.security.AllPermission;
;
【讨论】:
这行得通,但你能告诉我哪些权限可能是问题吗? 对不起,我不知道。最好选择另一个答案。 :)以上是关于RMI 如何添加库(并授予它们套接字权限)的主要内容,如果未能解决你的问题,请参考以下文章
与 OpenShift 上的 Java 程序的 RMI 或套接字连接