9

我正在开发一个人工智能项目,这是一个逻辑游戏,目标是两个用户连接到网络上的服务器,他们充当管理员,然后开始一个接一个地玩。

为了创建连接,我有一个服务器代码,它只是在 localhost:8000 上侦听,并在客户端到达时为其分配团队值。连接后,客户在管理员的控制下进行移动。

问题是,当我尝试将我的代码在浏览器中工作时,它会失败并出现以下错误:

java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8000 connect,resolve)

即使我已经创建了自己的策略,首先只授予对我的项目文件夹(file:///home/xxx/projects/-)的代码库的 Socket 访问权限,但在它不起作用之后,我授予了所有代码库的所有权限。我尝试将我的策略文件放在主目录和我的小程序代码所在的同一目录中。

感谢任何提示,谢谢。

4

5 回答 5

11

默认情况下,我认为它会在您的主目录中查找名为 .java.policy 的文件

您可以检查文件 /lib/security/java.security 以查看它的外观。检查名为 policy.url.n 的键

于 2010-04-10T09:56:15.597 回答
3

您可以使用此命令行选项设置安全策略文件的位置

-Djava.security.policy=policyfilepath

java命令。

或者您甚至可以使用该System.setProperty()过程设置此属性。

于 2012-09-27T00:31:02.073 回答
0

将策略文件放在 JRE 所在的位置。

例如,我的策略文件位于 C:\Program Files\Java\jre1.6.0_01\lib\security

于 2010-04-10T09:54:17.873 回答
0

我强烈建议尊重同源政策。在最好的情况下,安全隐患并不一定很明显。此外,具有标准权限的小程序具有更好的可用性并且应该更易于维护。

于 2010-04-10T12:11:39.450 回答
0

如果您授予特定 JAR(代码库)的权限,则仅当从线程开始到方法调用的整个执行堆栈都在该代码库/保护域中时才有效。

如果您的方法是库方法,并且您确定您可以安全地访问该操作,则可以使用 Priveded Block,这实质上可以确保调用您的块的堆栈部分在访问计算中不被考虑。

特权块,如此处所述:

http://docs.oracle.com/javase/6/docs/technotes/guides/security/doprivileged.html

问候伯恩德

于 2011-12-22T22:35:32.307 回答