启用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所示。

不管你是否相信,要保护我们的应用,只需添加这项依赖就可以了。应用启动时,自动配置功能会探测到 Spring Security 出现在了类路径中,从而初始化一些基本的安全配置。
如果你想看看这样配置的结果,可以启动应用并尝试访问主页(或者任意页面)。你将会看到一个非常简单的登录页,提示我们要进行认证,如图5.2所示。

小技巧:使用隐身模式,在手动测试安全性的时候,将浏览器设置为私有或隐身模式是非常有用的。这能够确保每次打开私有/隐身窗口时,都会有一个新的会话。这样,我们每次都需要重新登录应用。这能够确保在安全方面做的任何变更都生效,不会有任何旧的会话残留,妨碍我们看到变更的效果。 |
要想通过这个认证,你需要一个用户名和密码。用户名为 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 的安全需求,我们需要编写一些显式的配置,覆盖掉自动配置为我们提供的功能。我们首先配置一个合适的用户存储,这样一来,我们就能有多个用户了。