【问题标题】:Client Policy : access denied : java.net.SocketPermission 127.0.0.1:1099客户端策略:拒绝访问:java.net.SocketPermission 127.0.0.1:1099
【发布时间】:2014-06-22 08:14:53
【问题描述】:

我有一个奇怪的错误:

我的代码:

System.setProperty("java.security.policy", "client.policy");
System.setProperty("java.rmi.server.codebase", Servicecodebase);
System.setSecurityManager(new RMISecurityManager()); 

    Class<?> InterfaceMath =  RMIClassLoader.loadClass("http://127.0.0.1/dis/service.jar", "Service.InterfaceMath");



    Remote service = null;                  
     service  = Naming.lookup("rmi://127.0.0.1:1099/ok"); //  Error Message here
    Method getInformation = service.getClass().getDeclaredMethod("test", String.class);
    String res = (String) getInformation.invoke(service);
     System.out.println(" res : "+res);

我的文件client.policy:

grant {
    permission java.security.AllPermission;
    permission java.net.SocketPermission "localhost:1099", "connect, resolve";
    permission java.net.SocketPermission "127.0.0.1:1099", "connect, resolve";
    permission java.net.SocketPermission "localhost:80", "connect, resolve";
};

我的错误:

java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")

我在运行配置中使用 Eclipse - VM Arguments -Djava.security.policy==client.policy 然后我启动 --- 在控制台上启动 rmiregistry。

这很奇怪,因为我已经配置了我的文件,我加载了我的界面,但我无法与我的 RMI 通信。服务器我不知道为什么会出现这个问题。

更新: 我的项目ClientRMI:

  1. 源代码
  2. (默认包)
  3. consumerTest.java
  4. client.policy

【问题讨论】:

    标签: java security permissions classloader rmi


    【解决方案1】:

    显然找不到该文件。由于您仅将其指定为“client.policy”,因此在启动程序时它需要位于当前工作目录中。

    如果你运行它

    -Djava.security.debug=access,failure
    

    您将获得非常完整的安全管理器故障跟踪,包括当时有效的安全域和配置它的 .policy 文件。

    【讨论】:

    • 如果我只用这个运行,并且我的代码和 mon 文件策略在同一个包(默认包)上,我有相同的错误。访问被拒绝 ("java.net.socketPermission 127.0.0.1:1099 connect,resolve)
    • 我不知道'on the same package'是什么意思,但是执行程序时需要在当前目录下。包与它无关。
    • 我更新了我的帖子,是的,我的代码和我的 client.policy 在当前目录中。
    • 显然不是。当前工作目录是您执行 JAR 文件时所在的目录。它不是 JAR 文件所在的目录,除非它们都相同。我建议你跟踪System.getProperty("user.dir") 的值,看看你真正从哪里执行。你可能会得到一个惊喜。您也可以尝试我在答案中提到的安全跟踪。如果您的政策文件被找到,它将清楚地显示在那里。
    • 我试试这个,我有这个错误:线程“主”java.security.AccessControlException 中的异常:访问被拒绝(“java.lang.RuntimePermission”“modifyThread”)但我拥有所有权限跨度>
    猜你喜欢
    • 2015-06-30
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多