当前位置: 首页 > 知识库问答 >
问题:

Java拒绝访问属性权限

强德厚
2023-03-14

新并行/分布式计算和有问题的客户端服务器程序,我试图写。应该发生的是,服务器从客户端接收一个整数,并将总和发送回所有通向它的数字(例如,用户输入5,服务器计算1 2 3 4 5,服务器发送回15)。我还在试图弄清楚,所以我在客户端对输入进行了硬编码。

这就是我在服务器端所拥有的:

import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
import java.util.*;
public class Server {

public static void main(String[]args) {

    try{
        int port = 16790;
        String host = "localhost";
        CalculateSumServerImpl export = new CalculateSumServerImpl();
        LocateRegistry.createRegistry(port);
        String registryURL = "rmi://" + host + ":" + port + "/sum";
        Naming.rebind(registryURL, export);
        System.out.println("Server ready");
    } catch (Exception e) {
        e.printStackTrace();
    }
}   }


//to calculate the sum
import java.rmi.*;
import java.rmi.server.*;

public class CalculateSumServerImpl extends UnicastRemoteObject implements     CalServerInterface {

public int n; //value entered
public int sum; //sum

protected CalculateSumServerImpl() throws RemoteException {
    super();
}

@Override
public int calculateSum(int n) throws RemoteException {

    n = (n*(n+1))/2; //sum of 1 + 2 + 3 + .. + n

    sum = n;

    return sum;
} }

//interface
import java.rmi.Remote;

public interface CalServerInterface extends Remote {

 public int calculateSum(int n ) throws java.rmi.RemoteException;
}

在客户端:

import java.rmi.*;
import java.util.PropertyPermission;

public class Client {
public static void main(String[]args) {

    System.setSecurityManager(new java.rmi.RMISecurityManager());
    System.setProperty("java.net.preferIPv4Stack" , "true");

    try {
        int port = 16790;
        String host = "localhost";
        String registryURL = "rmi://" + host + ":" + port + "/sum";

        Project4ServerInterface obj = (Project4ServerInterface)Naming.lookup(registryURL);
        System.out.println("Lookup completed.");

        int output = obj.calculateSum(3);
        System.out.println("Sum is: " + output);

    } catch (Exception e) {
        e.printStackTrace();
    }

    System.setProperty("java.net.preferIPv4Stack","true");

} }

我也在客户端实现了接口。

我在客户端遇到的错误是:

异常线程"main"java.security.AccessControlExcture:访问拒绝(java.util.属性权限java.net.preferIPv4Stack写)在java.security.AccessControlContext.check权限(AccessControlContext.java:472)在java.security.AccessController.check权限(AccessController.java:884)在java.lang.SecurityManager.check权限(SecurityManager.java:549)在java.lang.ystem.set属性(System.java:792)在Project04Client.Client.main(Client.java:10)

错误指向带有此代码的行:

System.setProperty("java.net.preferIPv4Stack" , "true");

有人有解决这个错误的经验吗?

谢谢

共有1个答案

戎元忠
2023-03-14

问题是您已经为整个(客户端)应用程序设置了一个不允许您修改系统属性的安全管理器。

简单的修复方法是在设置RMI安全管理器之前设置需要设置的系统属性。

或者,您可以摆脱系统。setSecurityManager(…) 完全调用。您(可能)只在希望客户端能够从RMI服务下载类时才需要它。

我试图在安全管理器之前设置系统属性,但得到了一个AccessControlException,拒绝套接字权限。

这没有多大意义。只有在安全管理器到位的情况下,您才会得到一个AccessControlException。不应该有。。。除非这是在web浏览器中启动的小程序代码或类似代码。另外,我不知道为什么设置属性的调用会被拒绝,说你没有套接字权限。

当我将安全管理器完全取出时,我得到了一个指向接口的解组异常。

您还需要为要解组到客户端类路径的对象添加类/接口。

实际上,我刚刚注意到RMISecurityManager的javadoc说:

RMISecurityManager实现的策略与SecurityManager实现的策略相同。RMI应用程序应使用SecurityManager类或其他适当的SecurityManager实现,而不是此类。”

 类似资料:
  • 问题内容: 因此,我只是试图创建一个通过gmail进行导航并自动执行某些任务的代码。我设法成功自动登录到GMail,但是尝试登录页面源时登录后仍然遇到此错误代码。 错误代码 Java代码 注意:我使用的是最新版的Firefox和最新版的Selenium PS:关于类似问题,我经历了11个以上的不同问题,没有人提供明确的解决方案,答案也非常模糊。 问题答案: 伙计们,我很久以前就找到了解决此问题的方

  • 它与49.0版本完美地工作。 Browsestack功能 “浏览器”:“Firefox”,“Browserversion”:“”,“OS”:“Windows”,“OSVersion”:“7”,“分辨率”:“1024x768”,“提线木偶”:true 更奇怪的事。它与Selenium 3.0.1 beta2和Firefox 49,51,52一起工作,至少用于is is_displained方法,但是

  • 我复制示例代码的一部分,仅用于图像标记。当我在上运行时,得到以下错误消息:-

  • 我对spring security&oauth2相当陌生。作为学习的一部分,我试图设置一个OAuth2授权服务器,并保护RESTendpoint免受未经授权的访问。 代码 资源服务器 ProductController.java 未经授权API可以正常工作 如果我们只使用权限(@preauthorize(“hasauthorize('...')”))进行授权,它可以正常工作 作用域在到达oauth

  • 问题内容: 我有以下代码: 当我尝试保存文件时,出现以下错误 原因可能是什么,我该如何解决?我确实对此文件夹具有读写权限。 问题答案: 当创建一个new时,应该提供文件名,而不仅是要放置文件的目录。 尝试类似的东西

  • 问题内容: 这是我的编辑从第27行到第39行的代码: 我认为我的问题可能与Win7教授有关:(访问被拒绝) 如何解决这个问题,或者我需要做些什么或阅读才能使它起作用? 谢谢你不燃烧。 我只是更改了文件夹选项,使我获得完整的(Access …),现在我只需要弄清楚为什么在运行javac VendingMachine.java时为什么没有得到任何输出,我想是有一个新问题。 问题答案: 您的工作目录为。