一、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实现的。

springboot链接开启鉴权的nacos springboot鉴权原理_安全框架

 

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、登录流程认证流程

springboot链接开启鉴权的nacos springboot鉴权原理_微服务_02