天天看點

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

哈喽各位同學們大家好呀,提前祝同學們端午節快樂🎇!今天小編為大家分享開發者學院中課程“Spring Boot2.5安全機制與 REST API身份驗證明戰 ”幹貨總結哦~Spring Boot 2.5.x開發實戰可是Java中級工程師必備課程!

課程連結以及圖譜位址小編已經為大家指路了,搭配學習效果更佳👇

課程名稱:Spring Boot 2.5.x開發實戰

課程位址:

https://developer.aliyun.com/learning/course/71?spm=a2c6h.21254954.0.0.4e905907uoWZzr

圖譜名稱:Alibaba Java 技術圖譜

圖譜位址:

https://developer.aliyun.com/graph/java?spm=a2c6h.21110250.J_5703890090.6.700e3c67EjOBeJ

Spring Boot2.5安全機制與 REST API身份驗證明戰

一、Java Spring Boot 2.5安全機制 

本節課講的是應用程式安全問題,在Spring Boot體系裡,提供了一套安全機制,可以對接各種不同的安全架構,包括自定義實作原始的身份驗證機制。 

模拟簡單的REST API項目,啟用身份驗證,進行擴充對接MySQL資料庫,甚至對接Release緩存,實作整個使用者的注冊和身份驗證過程。 

但大型項目,比如淘寶、微信、新浪微網誌的賬号驗證基本上都在Release裡面進行,使用者的規模比較大,而且整個的使用者會話資訊,要在分布式緩存裡面進行儲存。後面可以擴充到Release身份驗證機制,把身份驗證與Release和MySQL結合起來,實作一個完整的項目。 

(一)Java Spring Boot 2.0安全機制 

Spring Boot提供的安全機制,可以用Spring Security 開源架構,也可以用Apache Shiro 開源架構,還可以用自定義實作安全驗證。Web架構開發底層本質上是Web請求進入Web架構,然後可以攔截,這裡也叫AOP程式設計,用于做攔截,做身份驗證的工作。總結: 

1. 自定義實作安全驗證; 

2. Apache Shiro 開源架構; 

3. Spring Security 開源架構; 

4. 大量使用AOP; 

5. 依賴注入思想; 

6. 靈活擴充。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

(二)Java Spring Boot 2.5安全機制 

也可以進行授權,定了一些角色,設定對應的權限,這裡支援的方式很多。Spring Boot作為快速開發架構,底層有Web開發的接口,可以做網站、 API應用、定時任務應用等等。 

目前應用程式身份驗證的類型非常多,不僅基于網頁的Form表單驗證、Basic、摘要身份驗證、令牌身份驗證,令牌身份驗證主要是用在REST API,包括一些大型的微服務架構程式中。當然還有企業級身份驗證,比如基于企業區域網路的客戶身份驗證,組織内部使用的身份驗證。還有跨第三方平台的開放式身份驗證體系等。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

(三)安全漏洞 

後續基于Spring Boot進行開發,盡量更新到比較新的版本,最好是Spring Boot2.3以上的版本,不要用太老的版本。Spring Boot 2020年9月份又修複了一批安全漏洞,涉及到遠端代碼過程執行的安全漏洞問題。 

安全漏洞建議總結: 

1. Spring Boot 2020年9月份修複漏洞; 

2. Spring Boot Actuator 未授權通路遠端代碼執行漏洞; 

3. 緊急修複 Spring Framework 版本包含一個安全漏洞(CVE-2020-5421)的修複程式。此漏洞可以通過 sessionId 繞過RFD (反射型檔案下載下傳)保護; 

4. Spring Boot 2018年修複了一些安全漏洞; 

5. 建議使用最新的Spring 5.0+版本; 

6. Spring 架構更新 5.0.0 - 5.0.2; 

7. Spring 架構更新 4.3.0 - 4.3.13; 

8. Spring Boot 1.5.10。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

(四)Java Spring Security 

安全架構本身相對成熟,可以內建Spring Security,也可以內建Spring MVC,也可以內建Spring Boot,也可以內建Spring cloud。 

保護Spring應用系統的安全标準,可以實施各種産同的身份驗證,可以做各種資料源進行內建,定制開發工作,包括基于角色、基于令牌都可以實作。這種多種身份驗證機制的支援,包括擴充URL、自定義路由規則,這種方法的驗證都可以進行實作。這種架構友善建構安全體系,不會限制應用程式的類型。整個內建和Spring應用平台內建的最好。總結: 

1. Spring Security功能強大且高度可自定義的安全架構; 

2. 保護Spring應用系統的安全标準; 

3. Spring Security專注于身份驗證和授權; 

4. 容易地擴充、自定義開發; 

5. 前身是Acegi Security; 

6. 提供安全認證服務的架構; 

7. Spring Security為基于J2EE企業應用提供了全面安全機制; 

8. Authentication驗證和Authorization授權; 

9. 抵禦會話攻擊, 點選劫持,CSRF跨站請求僞造。 

(五)Java安全架構Shiro 

Apache 官網有一個開源的項目叫Apache Shiro,是一個開源的安全管理,支援的工作非常強大,唯一的差别是不屬于Spring官方。但是很好用,有很多項目包括Spring Boot,甚至Spring Cloud都在使用Apache Shiro。對接不同的資料源,兩個都可以,取決于個人傾向,兩個都非常完善,正常情況下,如果希望技術上簡單一點,可以直接使用一整套Spring。Java安全架構Shiro總結: 

1. Apache Shiro簡單易用的開源Java安全架構; 

2. 輕松實作身份驗證、授權、加密和會話管理; 

3. 使用Shiro可以快速實作系統安全; 

4. Shiro其前身是Jsecurity項目; 

5. Shiro可以輕易實作Java網站安全驗證; 

6. 可應用于Web環境,非Web環境; 

7. 支援多種資料源MySQL等; 

8. 如LDAP,JDBC,Kerberos,ActiveDirectory等)。 

二、Java Spring Boot 2.5安全實戰 

(一)Spring Security Demo 

在之前的WEB架構基本上,可以加入門的starter-security的依賴,入完以後,會提供必要的安全元件,預設的就是security元件,當然也可以替換,兩個都可以配置。實作代碼如下: 

<dependencies> 

 ... 

<dependency> 

<groupId>org.springframework.boot</groupId> 

<artifactId> spring-boot-starter-security </artifactId> 

</dependency> 

</dependencies> 

(二)WebSecurityConfig 

早期的Spring1.x幾版本中,需要自己顯示去關閉或者開放安全驗證,現在的基本上預設是已經啟動了。可以直接設定WebSecurityConfig配置檔案,注入必要的安全配置規則,比如基于某個内路由規則、針對order訂單的身份驗證等,甚至加入角色的限制都可以實作,提供了強大的規則。 

WebSecurityConfig總結: 

1. Spring Security的配置類; 

2. WebSecurityConfig; 

3. 可以配置安全規則; 

4. 預設啟用basic驗證; 

5. # Spring Security可以在配置檔案中關閉; 

6. security.basic.enabled = false。 

(三)Web全站安全驗證配置 

下面這段代碼,是Web全站安全驗證配置的例子,針對anyRequest定制時,所有的請求都做身份驗證。hasRole表示針對目前的請求通路某個位址,或者所有的請求通路時是否具備某個角色。當然這個角色或者權限的驗證,需要定制擴充接口就可以了。比如連資料庫或者連緩存,實作角色查詢,有校驗就可以了。 

@ Configuration 

@ (SecurityProperties.BASIC_AUTH_ORDER - 10) 

public class ApplicationConfigurerAdapter extends 

WebSecurityConfiguerAdapter{ 

 @Override 

 protected void configure( http) throws 

 http.antMatcher("/admin/**") 

 .authorizeRequests() 

 .antMatchers("/admin/users").hasRole(“usersAdmin") 

 .antMatchers("/admin/orders").hasRole(“ordersAdmin") 

 .anyRequest().isAuthenticated(); 

(四)重新實作驗證機制 

當然有一般規則,就有特殊規則,允許自定義擴充底層的API實作自定義的判斷邏輯,這是良好的安全架構所具備的功能。重新實作驗證機制: 

• WebSecurityConfig安全配置類; 

• UserDetailsService 接口。 

 實踐案例示範: 

這個程式是之前的Web網站,看一下項目的依賴,通過檔案依賴可以看出,相比之前的項目,資料庫依然存在,還是用之前的spring data jpa,加入MySQL的資料庫的連結。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

後面稍微注意一下,這裡面有個starter security,加完以後,可以看一下左邊的依賴包的安全元件,有包括spring security config 、spring security core、spring security web等。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

下面看一下,代碼具體的配置和實作,新版本預設已經內建,現在最主要的要有Web安全配置,全局配置的時候使用記憶體驗證,實際可以對接資料庫、對接緩存。目前程式的程序裡面寫了使用者名“frankxu”,密碼“1234qwer”,這種方式并不提倡。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

正常情況下,可以定義特殊規則“configuer”,針對rize請求,可以比對首頁,允許首頁所有的人都可以通路;針對user,做身份驗證。也可以提供表單的登入模式“formLogin()”。做這個例子,是提供這種通路HOME可以不做身份驗證的方法,可以直接進入。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

查詢資料庫Get all,示範在浏覽器輸入“localhost:8081”,啟動網址,會發現一個問題,通路一個接口時,比如user檢視所有使用者,會自動跳轉到“login”。當請求一個位址的時候,發現不是可忽略的位址,會自動攔截,跳轉到登入界面,這個登入界面是基于表單。 

這時會要求輸入使用者賬号和密碼,使用者賬号和密碼是定義死的。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

為我之已經測試過了,點選登入,“Users/gerAll”就可以通路了, 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

如上圖所示,出現了3個賬号和密碼,這3個賬号全部傳回出來了。當然這裡還有别的接口,“GetById” 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

測試一下,輸入“GetById/1”,傳回ID為1的賬号和密碼: 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(七)

(五)Java面試題 

1.本質:URL,攔截請求,驗證,放行或者拒絕 

注意規則的順序,正常的項目,會有一個通路,并且有攔截請求操作,安全機制本質上是攔截請求,基于URL規則,判斷請求是不是要攔截,驗證,然後放行或者拒絕。驗證過程,可以調用緩存或資料庫實作安全驗證規則。 

其他的Java面試題這節課就不一一說明了,留給大家課後思考。 

2. Java Spring Security安全機制; 

3. 如何擴充使用Token令牌驗證; 

4. JWT開源安全令牌元件; 

5. 如何支援X509正式驗證; 

6. 自定義實作Spring Boot 2.5.x身份驗證; 

7. API安全如何實作; 

8. SSO單點登入怎麼實作? 

9. 微服務Spring Cloud安全體系; 

10. 轉Java,跳槽一線網際網路公司。