在 Spring Security 3.0 开始项目代码被细分为多个独立的 jar,可以更清晰的区分功能以及依赖。
1、核心模块
1.1 Core — spring-security-core.jar
该模块包含核心身份验证和访问控制类和接口、远程支持和基本配置 api。任何使用 Spring Security 的应用程序都需要它。它支持独立应用程序、远程客户端、方法(服务层)安全性和 JDBC 用户配置。它包含以下顶级包:
- org.springframework.security.core
- org.springframework.security.access
- org.springframework.security.authentication
- org.springframework.security.provisioning
1.2 Web — spring-security-web.jar
这个模块包含过滤器和相关的网络安全基础设施代码。它包含任何与 servlet APl 相关的内容。如果你需要 Spring Security web 身份验证服务和基于 url 的访问控制,你就需要它。主要的程序包是:
- org.springframework.security.web
还有很多模块,等用到时再分析。
2、Spring Boot 中使用 Spring Security 的最小设置
这里按照官网来了解 Spring Security 的具体使用方式~
2.1 按照官网提供的最小示例开始探索:
最小示例的工程目录:
可以说是啥都没有。
也不需要配置 application
POM中只有这四个:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
复制代码
直接运行,控制台给出了一串字符如下:
Using generated security password: 802bf3cc-cbcc-424d-9967-2f006ee3e135
复制代码
再访问 localhost:8080 会直接跳转到 /login 到一个具有样式的登录页:
表单中填写如下:
Username:user
Password:802bf3cc-cbcc-424d-9967-2f006ee3e135
复制代码
即可进入 localhost:8080 欢迎页,我们这里没有欢迎页报错 404。输入的密码就是控制台字符串那里。
上面的过程,就是完成了一个基本的用户验证,只不过从配置到密码都是默认配好的~
2.2 Spring Boot 的自动配置:
那么上述默认配置就是 Spring Boot Auto Configuration 完成的喽。
Spring Boot Auto Configuration 做了这些事:
springSecurityFilterChain
(bean):启用 Spring Security 的默认配置,将 servlet Filter 创建为一个 bean 叫做 springSecurityFilterChain。这个 bean 负责应用程序中的所有安全问题(保护应用程序 url、验证提交的用户名和密码、重定向到登录表单,等等)。UserDetailsService
(bean):创建一个 UserDetailsService bean,该 bean 具有用户名 user 和随机生成的登录到控制台的密码。- 为每个请求向 Servlet 容器注册一个名为 springSecurityFilterChain 的 bean 的过滤器。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END