我正在开发一个人工智能项目,这是一个逻辑游戏,目标是两个用户连接到网络上充当管理员的服务器,然后逐个开始玩。
为了创建连接,我有一个服务器代码,它只是在localhost:8000上监听,并在客户端到达时为其分配团队值。连接后,客户端将在Admin的控制下进行移动。
问题是,当我尝试将我的代码用于浏览器时,它会失败并出现以下错误:
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8000 connect,resolve)
即使我已经创建了自己的策略,首先只授予对我的项目文件夹(file:///home/xxx/projects/-
)的代码库的Socket访问权限,但在它无效后我授予所有权限来自所有代码库。我尝试将我的策略文件放在主目录和applet代码所在的同一目录中。
感谢任何提示,谢谢。
答案 0 :(得分:11)
默认情况下,我认为它会在您的主目录中查找名为.java.policy的文件
您可以检查文件/lib/security/java.security以查看其外观。 检查名为policy.url.n的密钥
答案 1 :(得分:2)
您可以使用此命令行选项
设置安全策略文件的位置-Djava.security.policy=policyfilepath
使用java
命令。
或者您甚至可以使用System.setProperty()
程序设置此功能。
答案 2 :(得分:0)
将策略文件放在JRE所在的位置。
例如,我的策略文件位于C:\ Program Files \ Java \ jre1.6.0_01 \ lib \ security
答案 3 :(得分:0)
我强烈建议尊重同源政策。在最好的情况下,安全影响不一定是显而易见的。此外,具有标准权限的applet具有更好的可用性,并且应该更易于维护。
答案 4 :(得分:0)
如果您授予特定JAR(代码库)的权限,则仅在从线程开始到方法调用的整个执行堆栈位于该代码库/保护域中时才有效。
如果您的方法是图书馆,并且您确定安全地访问了该操作,则可以使用Priratedged Block,它基本上可以确保在访问计算中不考虑调用块的堆栈部分。
特权阻止,如下所述:
http://docs.oracle.com/javase/6/docs/technotes/guides/security/doprivileged.html
问候 贝恩德