# HighScore 课程

> 原文： [https://docs.oracle.com/javase/tutorial/security/userperm/highscore.html](https://docs.oracle.com/javase/tutorial/security/userperm/highscore.html)

`HighScore`类存储并保护对`ExampleGame`（以及任何其他称之为游戏的游戏）的用户高分的访问。为简单起见，此类将高分值保存到用户主目录中名为`.highscore`的文件中。但是，在允许`ExampleGame`检索或更新用户的高分值之前，此类会检查以确保用户已授予`ExampleGame`权限以访问其安全策略文件中的高分。

## 检查`ExampleGame`是否具有 HighScorePermission

要检查`ExampleGame`是否有权访问用户的高分，`HighScore`类必须：

1.  调用`System.getSecurityManager()`以获取当前安装的安全管理器。
2.  如果结果不为 null（即，_ 是 _ 一个安全管理器，而不是调用者是一个不受限制的应用程序），那么
    1.  构造`HighScorePermission`对象，和
    2.  调用安全管理器的`checkPermission`方法，并将新传递的`HighScorePermission`对象传递给它。

这是代码：

```
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
    sm.checkPermission(
        new HighScorePermission(gameName));
}

```

如果`ExampleGame`具有指定的`HighScorePermission`，`checkPermission`方法基本上会询问安全管理器。换句话说，它询问安全管理器`ExampleGame`是否有权更新用户指定游戏的高分值（`ExampleGame`）。底层安全框架将参考用户的安全策略，以查看`ExampleGame`是否确实拥有此权限。

## HighScore Code

[`Here`](examples/com/scoredev/scores/HighScore.java) 是`HighScore`类的完整源代码。

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