启用Spring Security

保护 Spring 应用的第一步是将 Spring Boot security starter 依赖添加到构建文件中。在项目的 pom.xml 文件中,添加如下的 <dependency> 条目:

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

如果使用 Spring Tool Suite,这个过程会更加简单。右键选择 pom.xml 文件并在 Spring 弹出菜单中选择 Edit Starters。在 starter 依赖对话框中,选择 Security 分类下的 Spring Security 条目,如图5.1所示。

image 2024 03 13 15 05 16 111
Figure 1. 图5.1 使用Spring Tool Suite添加security starter

不管你是否相信,要保护我们的应用,只需添加这项依赖就可以了。应用启动时,自动配置功能会探测到 Spring Security 出现在了类路径中,从而初始化一些基本的安全配置。

如果你想看看这样配置的结果,可以启动应用并尝试访问主页(或者任意页面)。你将会看到一个非常简单的登录页,提示我们要进行认证,如图5.2所示。

image 2024 03 13 15 06 06 665
Figure 2. 图5.2 Spring Security免费为我们提供了一个登录页

小技巧:使用隐身模式,在手动测试安全性的时候,将浏览器设置为私有或隐身模式是非常有用的。这能够确保每次打开私有/隐身窗口时,都会有一个新的会话。这样,我们每次都需要重新登录应用。这能够确保在安全方面做的任何变更都生效,不会有任何旧的会话残留,妨碍我们看到变更的效果。

要想通过这个认证,你需要一个用户名和密码。用户名为 user,而密码则是随机生成的,它会写入到应用的日志文件中。日志条目大致如下所示:

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

输入了正确的用户名和密码后,你就有权限访问应用了。看上去,保护 Spring 应用是一项非常简单的任务。现在,Taco Cloud 应用已经安全了,我想我们可以结束本章并进入下一个话题了。但是,在继续下一步之前,我们回顾一下自动配置提供了什么类型的安全性。

通过将 security starter 添加到项目的构建文件中,我们得到了如下的安全特性:

  • 所有的 HTTP 请求路径都需要认证;

  • 不需要特定的角色和权限;

  • 认证过程是通过弹出一个简单的登录页实现的;

  • 系统只有一个用户,用户名为 user。

这是一个很好的开端,但是我相信大多数应用(包括 Taco Cloud)的安全需求都与这些基础的安全特性截然不同。

如果想要确保 Taco Cloud 应用的安全性,我们还有很多的工作要做,至少要配置 Spring Security 实现如下功能:

  • 提供应用自己的登录页,其设计要与我们的 Web 站点相符;

  • 提供多个用户,并提供一个注册页面,使得 Taco Cloud 的新用户能够注册;

  • 对不同的请求路径执行不同的安全规则,举例来说,主页和注册页面根本不需要进行认证。

为了满足 Taco Cloud 的安全需求,我们需要编写一些显式的配置,覆盖掉自动配置为我们提供的功能。我们首先配置一个合适的用户存储,这样一来,我们就能有多个用户了。