当我在 NetBeans 中运行我的客户端项目时,访问被拒绝(“java.net.SocketPermission”错误发生

Posted

技术标签:

【中文标题】当我在 NetBeans 中运行我的客户端项目时,访问被拒绝(“java.net.SocketPermission”错误发生【英文标题】:Access denied ("java.net.SocketPermission" Error Occurred when i run my CLient Project in NetBeans 【发布时间】:2014-01-07 22:06:52 【问题描述】:

java.security.AccessControlException: 访问被拒绝 ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")

我的服务器端工作正常,服务器上没有错误.. 当我运行我的客户端代码时,我得到这个访问被拒绝 ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve" ) 错误。

请任何专家帮助我:(

这是我的客户代码

/**
 *
 * @author saqibhussain
 */
public class ChatClient extends UnicastRemoteObject implements ChatClientIF, Runnable 
public ChatClient() throws RemoteException 

private ChatServerIF chat;
private String name = null;

protected ChatClient(String name, ChatServerIF chat) throws RemoteException         this.name = name;
    this.chat = chat;
    chat.RegisterChatClient(this);


public void retrieveMessage(String msg) throws RemoteException 
    System.out.println(msg);


public void run() 
    Scanner scaner = new Scanner(System.in);
    String message;
    while (true) 
        try 
            message = scaner.nextLine();
            chat.broadcastMessage(name + " : " + message);
         catch (RemoteException ex) 
            Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);
        
    


public static void main(String[] args) throws NotBoundException, MalformedURLException, RemoteException 
        System.setSecurityManager(new RMISecurityManager());

        try 
        String url = "rmi://localhost/RMIChatServer";
        ChatServerIF remoteObject = (ChatServerIF) Naming.lookup(url);
        System.out.println("Got remote object");
        new Thread(new ChatClient(args[0], remoteObject)).start();

         catch (Exception e) 
        System.out.println(e);
        


【问题讨论】:

检查防火墙和端口解锁。 @Nambari No. 这是SecurityManager 问题。检查Javadoc。防火墙不能导致java.security.AccessControlExceptions. 【参考方案1】:

向您的客户端应用程序添加安全策略。 您可以从此处下载示例策略:http://www.comp.lancs.ac.uk/~weerasin/csc253/tutorials/week8code/client.policy

然后使用以下 vm 参数启动您的客户端

java -Djava.security.policy==client.policy

在生产环境中要小心,因为给定的策略授予权限 您的客户执行的任何操作。

【讨论】:

【参考方案2】:

您已经定义了SecurityManager,但您没有授予自己足够的权限来执行您的代码。你需要给自己写一个policy file,并在通过-Djava.security.policy=...启动时指定给JVM。

或者,只需删除安全管理器。除非您使用 RMI 代码库功能,否则您不需要它。

【讨论】:

以上是关于当我在 NetBeans 中运行我的客户端项目时,访问被拒绝(“java.net.SocketPermission”错误发生的主要内容,如果未能解决你的问题,请参考以下文章

使用netbeans运行php项目时出错

更改 C++ netbeans 项目中的主文件

Netbeans xDebug 仅在 Mac 上运行一次

插入数据库时​​netbeans项目中的参数类型不匹配

无法在 netbeans 中运行 C++ CMake 项目

在netbeans的项目中编译单个文件