高分班

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 代码

HereHighScore类的完整源代码。

注意:doPrivileged方法调用用于使HighScore临时访问对其可用但对调用它的代码(ExampleGame)不可用的资源。例如,预计策略文件将授予HighScore权限以访问用户主目录中的.highscore文件,但不会将此权限授予游戏(例如ExampleGame)。