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
之类的游戏。