例外:访问被拒绝(“java.net.SocketPermission”“localhost:80”“listen,resolve”)

Posted

技术标签:

【中文标题】例外:访问被拒绝(“java.net.SocketPermission”“localhost:80”“listen,resolve”)【英文标题】:Exception: access denied ("java.net.SocketPermission" "localhost:80" "listen,resolve") 【发布时间】:2014-07-13 12:50:51 【问题描述】:

将 Eclipse Kepler (Windows 7) 用于在 localhost、端口 80 上打开 ServerSocket 的项目。

我使用安全管理器,其策略文件位于:

C:\Users\John\Developpement\workspace\security\my.policy

在 Eclipse 中,对于项目启动配置属性,对于 VM 参数:

-Djava.security.manager
-Djava.security.policy=$workspace_loc/security/my.policy

执行的bin文件是(我在Eclipse中使用单独的源和输出文件夹):

C:\Users\John\Developpement\workspace\SocketApps\bin\TinyHttpd.class

my.policy:

grant codeBase "file:\C:\Users\John\Developpement\workspace\SocketApps\bin\-" 
    permission java.net.SocketPermission "localhost:80", "listen,resolve";
;

从 Eclipse 运行时:

Exception in thread "main" java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:80" "listen,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
    at java.security.AccessController.checkPermission(AccessController.java:559)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkListen(SecurityManager.java:1134)
    at java.net.ServerSocket.bind(ServerSocket.java:375)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at java.net.ServerSocket.<init>(ServerSocket.java:128)
    at TinyHttpd.main(TinyHttpd.java:35)

到达代码时:

ServerSocket ss = new ServerSocket(80));

如果我删除 codeBase 过滤器:

grant 
    permission java.net.SocketPermission "localhost:80", "listen,resolve";
;

问题消失了,所以我想这是 codeBase 的表达方式是错误的。

我已经尝试了为this question 提出的解决方案,但它不起作用。 你能帮帮我吗?

【问题讨论】:

【参考方案1】:

在我发现问题所在后回答我自己的问题。 不确定是否最好删除这个问题,在我看来,保留它会帮助其他人。版主说。

取自Oracle documentation:

注意:codeBase 值是一个 URL,因此 应该始终使用 斜杠(从不反斜杠)作为目录分隔符,即使当 代码源实际上是在Win32系统上。因此,如果源 Win32 系统上的代码位置实际上是 C:\somepath\api\,那么 策略 codeBase 条目应如下所示:

grant codeBase "file:/C:/somepath/api/" 
    ...

这是一个初学者的错误。

【讨论】:

以上是关于例外:访问被拒绝(“java.net.SocketPermission”“localhost:80”“listen,resolve”)的主要内容,如果未能解决你的问题,请参考以下文章

运行 docker compose 会导致“连接到 localhost:5432 被拒绝”。例外

C#如何捕获异常并检查它是否包含字符串?

拒绝访问 .htaccess 中的一个特定文件夹

“对路径的访问被拒绝.” 是怎么回事

“对路径的访问被拒绝.” 是怎么回事

对路径的访问被拒绝怎么办?