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的一個封裝。框架