localhost
将 Eclipse Kepler (Windows 7) 用于在, port上打开 ServerSocket 的项目80
。
我使用带有策略文件的安全管理器,位于:
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
是错误的表达方式。
我已经尝试过为这个问题提出的解决方案,但它不起作用。你能帮助我吗?