一、Spring Security简介
1、什么是Spring Security?
Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架。除了常规的认证(Authentication)和授权(Authorization)之外,Spring Security还提供了诸如ACLs,LDAP,JAAS,CAS等高级特性以满足复杂场景下的安全需求。
Spring Security 应用级别的安全主要包含两个主要部分,即登录认证(Authentication)和访问授权(Authorization),首先用户登录的时候传入登录信息,登录验证器完成登录认证并将登录认证好的信息存储到请求上下文,然后在进行其他操作,如接口访问、方法调用时,权限认证器从上下文中获取登录认证信息,然后根据认证信息获取权限信息,通过权限信息和特定的授权策略决定是否授权。
简单来说,Spring Security 核心功能只做以下3件事情:
- 认证(你是谁)
- 授权(你能干什么)
- 攻击防护(防止伪造身份)
2、为什么要使用Spring Security?
项目开发中,安全框架多种多样,那么为什么要选择Spring Security作为微服务开发的安全框架呢?JavaEE有另一个优秀的安全框架Apache Shiro, Apache Shiro框架在企业级的项目开发中非常受欢迎,一般都在单体项目中使用。但是在微服务架构中,目前的Apache Shiro是无能为力的。
Spring Security是来自于Spring Resource社区,采用了注解的方式来控制权限,熟悉Spring框架者很容易上手Spring Security,另外一个原因就是Spring Security很容易应用在Spring Boot工程,也易于集成到Spring Cloud构建的微服务项目中。
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作
3、Spring Security架构
如果要对Web资源进行保护,最好的办法莫过于Filter,要想对方法调用进行保护,最好的办法莫过于AOP。Spring security对Web资源的保护,就是靠Filter实现的。
4、Spring Boot Security & Spring Security关系
Security框架中主要依赖如下2个坐标即可,分别是spring-security-web 和 spring-security-config
<!-- 身份验证 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> </dependency>
Spring Boot Security 是对 Spring Security做了封装,仅仅是封装,并没有改动Spring Security的内容。并加上Spring Boot的起步依赖的特性,Spring Boot Security 依赖坐标如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
5、登录流程认证流程