Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。本篇文章将在 Spring Boot 中使用最简单配置启动 Spring Security 框架。


1. 导入依赖

<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>

2. 启动 Spring Boot

导入依赖后,我们就可以启动 Spring Boot。控制台输出以下信息就说明 Spring Security 配置成功了:

...
INFO 23689 --- [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration :

Using generated security password: 8e557245-73e2-4286-969a-ff57fe326336
...

不敢相信,不需要我们做其他配置就可以正常使用 Spring Security 了,这就是启动 Spring Security 的最简配置。

3. Spring Boot 的自动配置

在上面的示例,我们仅仅导入了依赖就能正常使用 Spring Security ,是因为Spring Boot 为我们完成了 Spring Security 的一些默认配置。接下来,我们来了解一下 Spring Boot 到底做了什么。

3.1 Spring Security 默认配置

  • 启动默认配置后,该配置会创建一个名为 springSecurityFilterChain 的 Servlet 过滤器 bean。这个 bean 负责应用程序中所有的安全性(保护应用程序URL,验证提交的用户名和密码,重定向到登录表单等)。
  • 使用用户名和随机生成的密码创建一个 UserDetailsService bean,并记录到控制台。
  • springSecurityFilterChain 注册过滤器。

3.2 默认配置实现的功能

虽然 Spring Security 的默认配置不多,但却实现了很多功能:

  • 需要通过身份验证才能与应用程序进行交互。
  • 为你生成一个默认的登陆表单。
  • 让用户使用 user 用户名和密码通过基于表单的身份验证(再前面的示例中,密码为 8e557245-73e2-4286-969a-ff57fe326336)。
  • 使用 BCrypt 保护密码的储存。
  • 允许用户注销。
  • 预防 CSRF 攻击。
  • Session Fixation 保护。
  • Security Header 集成。
  • Servlet API方法集成。
    • HttpServletRequest#getRemoteUser()
    • HttpServletRequest.html#getUserPrincipal()
    • HttpServletRequest.html#isUserInRole(java.lang.String)
    • HttpServletRequest.html#login(java.lang.String, java.lang.String)
    • HttpServletRequest.html#logout()

参考文献:Spring Security 5.2.3 官方文档

评论