Spring Security如何实现复杂的安全策略配置?
摘要:Spring Security title:version 5.6.x Spring Security 是一个提供认证、授权以及一些常见漏洞防护的框架。该框架为 Servlet 应用程序(Spring MVC)和响应式应用程序(Spring
Spring Security
title:version
5.6.x
Spring Security 是一个提供认证、授权以及一些常见漏洞防护的框架。该框架为 Servlet 应用程序(Spring MVC)和响应式应用程序(Spring WebFlux,本文不表)提供防护,并作为防护 spring 项目的事实标准。
Servlet 应用程序
Spring Security 通过标准的 Servlet 过滤器 集成 Servlet 容器。这表明只要在 Servlet 容器中运行的应用程序都可以使用该框架。具体来说,你不需要在以 Servlet 为容器的应用程序中专门引入 Spring,就可以使用该框架。
在 Spring Boot 项目中使用 Spring Security
新建项目
build.gradle 中输入以下内容:
plugins {
id 'org.springframework.boot' version '2.6.7'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.github.toy'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
tasks.named('test') {
useJUnitPlatform()
}
运行
控制台输出
...
2022-04-30 16:21:28.626 WARN 37347 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: fceb50df-05cf-40e4-a4c5-67d5da55a6b4
...
Spring Boot Auto Configuration
Spring Boot 自动处理以下内容:
启用 Spring Security 的默认配置,它会创建一个 servlet 过滤器 bean,叫做 springSecurityFilterChain。这个 bean 负责应用程序中的所有安全工作(保护应用程序的 URL,验证提交的用户名和密码,重定向登录表单,等等)。
用户名(username)为 user,密码为 console 中生成的随机密码,使用此账号和密码创建 UserDetailsService bean。
通过 Servlet 容器为每个请求注册名为 springSecurityFilterChain 的过滤器。
Spring Boot 配置的内容不多,但是做的很多。
