Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用已不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中更新的语言特性的摘要。
请参阅JDK发布说明,了解有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
HighScore类存储和保护用户的高分,用于ExampleGame(以及其他调用它的游戏)。为简单起见,该类将高分值保存到名为.highscore的文件中,该文件位于用户的主目录中。然而,在允许ExampleGame检索或更新用户的高分值之前,该类会检查用户是否在安全策略文件中授权ExampleGame访问高分。
ExampleGame是否拥有HighScorePermission要检查ExampleGame是否有权限访问用户的高分,HighScore类必须执行以下操作:
System.getSecurityManager()以获取当前安装的安全管理器。HighScorePermission对象,并checkPermission方法,并将新构造的HighScorePermission对象传递给它。下面是代码:
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(
new HighScorePermission(gameName));
}
checkPermission方法实际上询问安全管理器是否ExampleGame具有指定的HighScorePermission。换句话说,它询问安全管理器是否ExampleGame具有更新指定游戏(ExampleGame)用户的高分值的权限。底层安全框架将查阅用户的安全策略以查看ExampleGame是否确实具有此权限。
这里是HighScore类的完整源代码。
注意:使用doPrivileged方法调用可以使HighScore临时访问对其可用但对调用它的代码(ExampleGame)不可用的资源。例如,预期策略文件将授予HighScore访问用户主目录中的.highscore文件的权限,但不会授予这个权限给诸如ExampleGame之类的游戏。