:::warning 强烈建议大家先看完源码篇,虽然复杂难懂,但是那个时候我也是抱着一遍看不懂就再看一遍的态度去啃的,当你看完之后你就会知道Spring Security原来是这样的呀!感叹Spring Security强大的时候同时又佩服自己终于啃完了🥳
源码篇其中大部分内容都是参考江南一点雨老师以及码农小胖哥老师的文章,多谢两位老师的付出,大家可以直接搜两位老师的文章看也是一样的。
接下来的实战环节只不过就是把所学的Spring Security知识用上而已,对读完源码的你那还不是小菜一碟。加油吧,骚年🤓🎨🚀
实战项目地址分享在https://github.com/xihuanxiaorang/simple,有需要的同学可以自己下载。 :::

Spring Boot provides a spring-boot-starter-security starter that aggregates Spring Security-related dependencies together. The simplest and preferred way to use the starter is to use Spring Initializr by using an IDE integration (Eclipse, IntelliJ, NetBeans) or through https://start.spring.io.

1、创建项目以及引入依赖

因为咱们是要学习 SpringSecurity 整个系列,所以可以建一个父工程 spring-security-study,接下来学习时建的子工程全都在该父工程下,使用 Spring Initializr 创建父工程。
image.png
选择 Spring WebSpring Security 依赖。
image.png
删除不需要的文件。
image.png

其 pom.xml 文件中的内容为:

  1. <!-- 该父工程的父工程为 spring-boot-stater-parent,版本为最新版 2.6.2 -->
  2. <parent>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-parent</artifactId>
  5. <version>2.6.2</version>
  6. <relativePath/> <!-- lookup parent from repository -->
  7. </parent>
  8. <!-- 该父工程的坐标 -->
  9. <groupId>top.xiaorng</groupId>
  10. <artifactId>spring-security-study</artifactId>
  11. <version>1.0-SNAPSHOT</version>
  12. <!-- 作为父工程需要将打包方式修改成 pom-->
  13. <packaging>pom</packaging>
  14. <!-- 声明配置属性 -->
  15. <properties>
  16. <maven.compiler.source>8</maven.compiler.source>
  17. <maven.compiler.target>8</maven.compiler.target>
  18. <java.version>1.8</java.version>
  19. </properties>
  20. <!-- 导入依赖 -->
  21. <dependencies>
  22. <!-- spring security 安全框架依赖 -->
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-security</artifactId>
  26. </dependency>
  27. <!-- web依赖 -->
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-web</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-test</artifactId>
  35. <scope>test</scope>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.springframework.security</groupId>
  39. <artifactId>spring-security-test</artifactId>
  40. <scope>test</scope>
  41. </dependency>
  42. </dependencies>
  43. <!-- SpringBoot 的 Maven 插件 -->
  44. <build>
  45. <plugins>
  46. <plugin>
  47. <groupId>org.springframework.boot</groupId>
  48. <artifactId>spring-boot-maven-plugin</artifactId>
  49. </plugin>
  50. </plugins>
  51. </build>

接下来创建咱们今天学习用的子工程 hello-spring-security-01,使用 maven 项目创建该工程:
image.png
发现此时 src 目录下并没有 Springboot 的启动类,所以我们得手动创建:

  1. @SpringBootApplication
  2. public class SpringSecurityApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(SpringSecurityApplication.class, args);
  5. }
  6. }

之后在 resources/static 目录下 新建一个 index.html 页面,仅仅只是测试,所以页面的内容可以简单点:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Hello Spring Security</title>
  6. </head>
  7. <body>
  8. 学习 Spring Security !!!
  9. </body>
  10. </html>

2、启动项目查看效果

image.png
访问 localhost:8080 端口,发现居然需要用户名和密码进行登录?其中用户名是 user,密码是控制台中输出的 UUID 字符串,如上图所示,至于为何用户名和密码是这样,在接下来的文章中会一一介绍。
image.png
点击登录,输入正确的用户名和密码之后,即可访问到 index.html 中的内容。
image.png
SpringSecurity的强大之处就在于只要引入一个依赖,系统中的所有接口都被自动保护起来!!!

3、🤔思考

  1. 引入SpringSecurity之后,为什么没有添加任何配置,所有的请求就需要认证才能访问呢?
  2. 在项目中明明没有登录界面,那么登录界面是怎么来的?
  3. 为什么使用useruuid密码就能登录,登陆时验证用户的数据源存在哪里呢?

本系列的代码示例已经放在github代码仓,有需要的可以访问获取。