gpt4 book ai didi

Java SocketPermission 策略问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:42 27 4
gpt4 key购买 nike

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

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)

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

Your client and server should use the Java Security manager, and your project must include policy files for each that defines the necessary permissions for them to run. Allow your server and client to contact each other on localhost using ports in the range 2220-2230.

我怎样才能遵守这个限制?或者这是否仅适用于服务器监听的端口?我认为如果我为大于 2231 的端口授予 acceptresolve 权限,我可以让它工作。但我不知道这是否与限制冲突。

最佳答案

因为客户端随机选择它的本地 tcp 端口(我想)你应该给它适当的权限:

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

客户端没有监听传入的连接,不需要“监听”和“接受”的权限。在服务器上,只要服务器不建立传出 tcp 连接,您就可以放弃“连接”权限。

关于Java SocketPermission 策略问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4161947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com