代码之家  ›  专栏  ›  技术社区  ›  Vivin Paliath

Java SOCKET权限策略问题

  •  3
  • Vivin Paliath  · 技术社区  · 14 年前

    我有一个客户机和服务器程序,尝试彼此通信。在服务器的策略文件中,我指定了以下内容:

    grant signedBy "vivin" {
      permission java.io.FilePermission "-", "read, write";
      permission java.net.SocketPermission "localhost:2220-2230", "accept, connect, listen, resolve", signedBy "vivin";
    };
    

    在我的客户的政策文件中,我有:

    grant signedBy "vivin" {
      permission java.net.SocketPermission "localhost:2220-2230", "accept, connect, listen, resolve", signedBy "vivin";
    };
    

    我启动服务器,它监听2225端口。然后我启动我的客户机,它尝试连接到正在监听端口2225的服务器。不幸的是,我在服务器上得到了这个错误:

    [java] Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:45944 accept,resolve)
    [java]  at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    [java]  at java.security.AccessController.checkPermission(AccessController.java:546)
    [java]  at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    [java]  at java.lang.SecurityManager.checkAccept(SecurityManager.java:1157)
    [java]  at java.net.ServerSocket.implAccept(ServerSocket.java:457)
    [java]  at java.net.ServerSocket.accept(ServerSocket.java:421)
    

    端口号一直在变化;我假设它是客户机的端口号(服务器连接回客户机的地方?)对吗?对于此分配,对端口号指定了限制:

    您的客户机和服务器应该使用Java安全管理器,并且您的项目必须包括为每个用户定义其运行所需权限的策略文件。允许您的服务器和客户端使用范围内的端口在本地主机上相互联系 2220—2230 .

    我怎样才能遵守这个限制?或者这只适用于服务器监听的端口?我想如果我给你 accept resolve 对大于2231的端口的权限。但我不知道这是否违反了限制。

    1 回复  |  直到 14 年前
        1
  •  5
  •   ordnungswidrig    14 年前

    grant signedBy "vivin" {
      permission java.net.SocketPermission "localhost:1024-", "connect, resolve", signedBy "vivin";
    };