# 4.1 启用 Spring Security

保护 Spring 应用程序的第一步是将 Spring Boot security starter 依赖项添加到构建中。在项目的 pom.xml 文件中，添加以下 \<dependency> 内容：

```markup
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
```

如果正在使用 Spring Tool Suite，这甚至更简单。右键单击 pom.xml 文件并从 Spring 上下文菜单中选择 编辑 Starters。将出现 “启动依赖项” 对话框。检查核心类别下的安全条目，如图 4.1 所示。

![图 4.1 使用 Spring Tool Suite 添加 security starter](https://867170852-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LrmLE3NwQoVJk02Q_BX%2F-LsGNzDutAWQQM7I5YA9%2F-LsGOEQ6W5DqZibGSz7n%2F%E5%9B%BE%204.1%20%E4%BD%BF%E7%94%A8%20Spring%20Tool%20Suite%20%E6%B7%BB%E5%8A%A0%20security%20starter.jpg?alt=media\&token=aa2ab80d-8ddd-451e-9d9b-27b23baba42a)

上面的依赖项是保护应用程序所需的唯一的东西。当应用程序启动时，自动配置将检测类路径中的 Spring Security，并设置一些基本的安全性配置。

如果想尝试一下，启动应用程序并访问主页（或任何页面）。将提示使用 HTTP 基本身份验证对话框进行身份验证。要想通过认证，需要提供用户名和密码。用户名是 *user*。至于密码，它是随机生成并写入了应用程序日志文件。日志条目应该是这样的：

```
Using default security password: 087cfc6a-027d-44bc-95d7-cbb3a798a1ea
```

假设正确地输入了用户名和密码，将被授予对应用程序的访问权。

保护 Spring 应用程序似乎非常简单。Taco Cloud 应用程序的已经被保护了，我想我现在可以结束这一章，进入下一个主题了。但是在我们开始之前，让我们考虑一下自动配置提供了什么样的安全性。

只需要在项目构建中添加 security starter，就可以获得以下安全特性：

* 所有的 HTTP 请求路径都需要认证。
* 不需要特定的角色或权限。
* 没有登录页面。
* 身份验证由 HTTP 基本身份验证提供。
* 只有一个用户；用户名是 *user*。

这是一个良好的开端，但我认为大多数应用程序（包括 Taco Cloud）的安全需求将与这些基本的安全特性有很大的不同。

如果要正确地保护 Taco Cloud 应用程序，还有更多的工作要做。至少需要配置 Spring Security 来完成以下工作：

* 提示使用登录页面进行身份验证，而不是使用 HTTP 基本对话框。
* 为多个用户提供注册页面，让新的 Taco Cloud 用户可以注册。
* 为不同的请求路径应用不同的安全规则。例如，主页和注册页面根本不需要身份验证。

为了满足对 Taco Cloud 的安全需求，必须编写一些显式的配置，覆盖自动配置提供的内容。首先需要配置一个合适的用户存储，这样就可以有多个用户。
