Spring Boot 2.x实战77 - Spring Security 1 - Spring Boot下的Spring Security(自动配置)与Web安全配置

学习Spring Security首先要清楚认证和授权这两个重要的概念。

  • 认证(Authentication):Authentication确定谁在访问资源;当你访问绝大部分系统的时候,你需要提供用户名和密码,让系统确定你提供的用户名密码和他们存储的是否一致;若认证通过则可访问受保护的资源,不通过则不可以访问受保护的资源。

  • 授权(Authoraztion):Authoraztion确定当前访问者是否有权限访问指定的受保护资源;指定的受保护资源需要指定的权限才能访问,若当前访问者拥有这个权限,他才可以访问指定的受保护资源。

1 Spring Security的应用

1.1 Spring Boot的自动配置

Spring Boot为我们提供了SecurityAutoConfiguration自动配置,它导入了三个自动配置,并通过SecurityProperties使用spring.security.*来配置Spring Security:

  • SecurityAutoConfiguration
    • SpringBootWebSecurityConfiguration:提供默认的Web安全配置(DefaultConfigurerAdapter继承WebSecurityConfigurerAdapter),若我们自己继承了WebSecurityConfigurerAdapter配置,我们只需要定制自己需要的部分,其余的保持默认。
    • WebSecurityEnablerConfiguration:如果系统中有WebSecurityConfigurerAdapter的Bean,则使用@EnableWebSecurity自动开启Web安全配置。
    • SecurityDataConfiguration:当jar包org.springframework.security:spring-security-data在类路径中时,允许在使用Spring Data进行查询时引用安全相关的表达式。
  • UserDetailsServiceAutoConfiguration:自动配置一个内存中的用户,可通过spring.security.user.*来配置;如果我们自定了认证的实现,则自动配置无效。

1.1 开启Web安全配置

在Spring Boot下我们无需手动使用@EnableWebSecurity(组合了@Configuration注解)开启Web安全配置。但是我们还是需要了解下它为我们做了什么,它导入的配置有:

  • WebSecurityConfiguration:注册Bean名为springSecurityFilterChain的Servlet过滤器(Filter),它创建Spring Security Filter Chain,负责应用中所有关于安全的内容。
  • WebMvcSecurityConfiguration:实现了Spring MVC的WebMvcConfigurer,并额外注册了3个ArgumentResolvers,我们可以在控制器方法参数中可以直接获取:
    • AuthenticationPrincipalArgumentResolver:使用@AuthenticationPrincipal注解用户参数获得用户信息;
    • CurrentSecurityContextArgumentResolver@CurrentSecurityContext注解用户参数获得与SecurityContext中包含的信息。
    • CsrfTokenArgumentResolver:获取参数中的CsrfToken
  • OAuth2ClientConfiguration:OAuth 2.0客户端支持配置。
  • EnableGlobalAuthentication:配置全局的AuthenticationManagerBuilder

新建应用,信息如下:

Group:top.wisely

Artifact:learning-spring-security

Dependencies:Spring SecuritySpring Web StarterSpring Data JPAMySQL DriverLombok

build.gradle文件中的依赖如下:

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-security'
   implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
   implementation 'org.springframework.boot:spring-boot-starter-web'
   compileOnly 'org.projectlombok:lombok'
   runtimeOnly 'mysql:mysql-connector-java'
   annotationProcessor 'org.projectlombok:lombok'
  //...
}

1.2 定制Web安全配置

和Spring MVC很类似,我们只需让一个配置类继承WebSecurityConfigurerAdapter类或实现WebSecurityConfigurer接口即可。

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
}

新书推荐:

我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html
在这里插入图片描述
主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和批处理(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

猜你喜欢

转载自blog.csdn.net/wiselyman/article/details/106800208