Spring Security是Spring Resource社区的一个安全组件,Spring Security为JavaEE企业级开发提供了全面的安全防御。安全防御是一个不断变化的目标,Spring Security经过版本不断迭代来实现这一目标。Spring Security采用“安全层”的概念,使每一层都尽量安全,连续的安全层能够达到全面的防御。Spring Security能够在Controller层、Service层、DAO层等以加注解的方式来保护应用程序的安全。Spring Security提供了细粒度的权限控制,能够精细到每个API接口、每个业务的方法,或者每个操做数据库的DAO层的方法。Spring Security提供的是应用程序层的安全解决方案,一个系统的安全还须要考虑传输层和系统层的安全,例如采用Https协议、服务器部署防火墙等。web
使用Spring Security有不少缘由,其中一个重要缘由是它对环境的无依赖性、低代码耦合性。将工程从新部署到一个新的服务器上,不须要为Spring Security作什么工做。Spring Security提供了数十个安全模块,模块与模块间的耦合性低,模块之间能够自由组合来实现特定需求的安全功能,具备较高的可定制性。总而言之,Spring Security具备很好的可复用性和可定制性。spring
在安全方面,有两个主要的领域,一是“认证”,即你是谁;二是“受权”,即你拥有什么权限,Spring Security的主要目标就是在这两个领域。“认证”是认证主体的过程,一般是指能够在应用程序中执行操做的用户、设备或其余系统。“受权”是指决定是否容许已认证的主体执行某一项操做。数据库
安全框架多种多样,那为何选择Spring Security做为微服务开发的安全框架呢?JavaEE有另外一个优秀的安全框架Apache Shiro,Apache Shiro在企业级的项目开发中十分受欢迎,通常使用在单体服务中。但在微服务架构中,目前版本的Apache Shiro是无能为力的。Spring Security来自Spring Resource社区,采用了注解的方式控制权限,熟悉Spring的开发者很容易上手Spring Security。另一个缘由就是Spring Security易于应用于Spring Boot工程,也是易于集成到采用Srping Cloud构建的微服务系统中。安全
在Spring Security框架中,主要包含了两个依赖Jar,分别是spring-security-web依赖和spring-security-config依赖,代码以下:服务器
<dependencies> <!-- ... other dependency elements ... --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>4.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>4.1.0.RELEASE</version> </dependency> </dependencies>
Spring Boot对Spring Security框架作了封装,仅仅是封装,并无改动Spring Security这两个包的内容,并加上了Spring Boot的起步依赖的特性。架构
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
进入spring-boot-starter-security的pom文件,能够发现pom文件包含了Spring Security的两个Jar包,并移除了这两个Jar包的apo功能,引入了aop的依赖,另外包含了spring-boot-starter的依赖。因而可知,spring-boot-starter-security是对Spring Security的一个封装。框架