天天看點

BCrypt加密怎麼存入資料庫_Spring Boot+CAS 單點登入,如何對接資料庫?

松哥給最近連載的 Spring Security 系列也錄制了視訊教程,感興趣的小夥伴請戳這裡->Spring Boot+Vue+微人事視訊教程(Spring Boot 第十章就是 Spring Security)。

在前面的兩篇文章中,松哥和大家分享了 CAS Server 的搭建以及如何使用 Spring Security 搭建 CAS Client。

但是前面的案例有一個問題,就是登入使用者是在 CAS Server 配置檔案中寫死的,沒有對接資料庫,實際項目中,這裡肯定要對接資料庫,是以今天,松哥就來和大家聊一聊 CAS Server 如何對接資料庫。

松哥最近和 Spring Security 杠上了,這是 Spring Security 系列的第 25 篇:

  1. 挖一個大坑,Spring Security 開搞!
  2. 松哥手把手帶你入門 Spring Security,别再問密碼怎麼解密了
  3. 手把手教你定制 Spring Security 中的表單登入
  4. Spring Security 做前後端分離,咱就别做頁面跳轉了!統統 JSON 互動
  5. Spring Security 中的授權操作原來這麼簡單
  6. Spring Security 如何将使用者資料存入資料庫?
  7. Spring Security+Spring Data Jpa 強強聯手,安全管理隻有更簡單!
  8. Spring Boot + Spring Security 實作自動登入功能
  9. Spring Boot 自動登入,安全風險要怎麼控制?
  10. 在微服務項目中,Spring Security 比 Shiro 強在哪?
  11. SpringSecurity 自定義認證邏輯的兩種方式(進階玩法)
  12. Spring Security 中如何快速檢視登入使用者 IP 位址等資訊?
  13. Spring Security 自動踢掉前一個登入使用者,一個配置搞定!
  14. Spring Boot + Vue 前後端分離項目,如何踢掉已登入使用者?
  15. Spring Security 自帶防火牆!你都不知道自己的系統有多安全!
  16. 什麼是會話固定攻擊?Spring Boot 中要如何防禦會話固定攻擊?
  17. 叢集化部署,Spring Security 要如何處理 session 共享?
  18. 松哥手把手教你在 SpringBoot 中防禦 CSRF 攻擊!so easy!
  19. 要學就學透徹!Spring Security 中 CSRF 防禦源碼解析
  20. Spring Boot 中密碼加密的兩種姿勢!
  21. Spring Security 要怎麼學?為什麼一定要成體系的學習?
  22. Spring Security 兩種資源放行政策,千萬别用錯了!
  23. 聊一聊 Spring Boot 中的 CAS 單點登入
  24. Spring Boot 實作單點登入的第三種方案!

1.整體思路

先來看整體思路。

我們用 CAS Server 做單點登入,CAS Server 主要是負責認證的,也就是它主要解決登入問題。登入成功之後,還有一個權限處理的問題,權限的問題則交由各個 CAS Client 自行處理,并不在 CAS Server 中完成。

在上篇文章中,松哥有教過大家定義 UserDetailsService,不知道大家是否還記得如下代碼(忘記了可以參考上篇文章:Spring Boot 實作單點登入的第三種方案!):

@Component
           

這段代碼是在什麼時候執行呢?

如果我們沒有使用 CAS 這一套的話,這段代碼當然是在使用者登入的時候執行,使用者登入時,從資料庫中查詢使用者的資訊,然後做校驗(參考本系列前面文章就懂)。

如果我們使用 CAS 這一套,使用者登入的校驗将在 CAS Server 上執行,CAS Client 就不用做校驗工作了,但是為什麼我們還需要定義 UserDetailsService 呢?這是為了當使用者在 CAS Server 上登入成功之後,拿着使用者名回到 CAS Client,然後我們再去資料庫中根據使用者名擷取使用者的詳細資訊,包括使用者的角色等,進而在後面的鑒權中用上角色。

好了,這是我們一個大緻的思路,接下來我們來看具體實作。

2.具體實作

接下來的配置在 松哥手把手教你入門 Spring Boot + CAS 單點登入 一文的基礎上完成,是以還沒看前面文章的小夥伴建議先看一下哦。

2.1 準備工作

首先我們先在資料庫中準備一下使用者表、角色表以及使用者角色關聯表:

CREATE 
           

2.2 CAS Server

然後我們要在 CAS Server 的 pom.xml 檔案中添加兩個依賴:

注意這裡不用添加資料庫驅動,系統會自動解決。

添加完成之後,再在 src/main/resources/application.properties 檔案中添加如下配置:

  • 前三行配置是資料庫基本連接配接配置,這個無需我多說。
  • 第四行表示配置使用者查詢 sql,根據使用者名查詢出使用者的所有資訊。
  • 第五行表示資料庫中密碼的字段名字是什麼。
  • 第六行是資料庫驅動。

OK,配置完成後,接下來我們就來重新開機 CAS Server:

啟動成功後,浏覽器輸入 https://cas.javaboy.org:8443/cas/login 就可以進入登入頁面了(注意是 https 哦):

BCrypt加密怎麼存入資料庫_Spring Boot+CAS 單點登入,如何對接資料庫?

此時登入使用者名就是 javaboy,密碼是 123。

2.3 CAS Client

接下來我們再來看看 CAS Client 要做哪些完善。

接下來的配置在 Spring Boot 實作單點登入的第三種方案! 一文的基礎上完成,是以還沒看前面文章的小夥伴建議先看一下哦。

同時,為了案例簡潔,我這裡使用 JPA 來操作資料庫,要是大家不熟悉這塊的操作,可以參考本系列之前的文章:Spring Security+Spring Data Jpa 強強聯手,安全管理隻有更簡單!。

CAS Client 中的對接主要是實作 UserDetailsService 接口。這裡要用到資料庫查詢,是以我們首先添加資料庫相關依賴:

<dependency>
           

然後在 application.properties 中配置資料庫連接配接資訊:

都是正常配置,我們就不再重複解釋了。

接下來我們建立兩個實體類,分别表示使用者角色了使用者類:

使用者角色:

@Entity(name = 
           

這個實體類用來描述使用者角色資訊,有角色 id、角色名稱(英文、中文),@Entity 表示這是一個實體類,項目啟動後,将會根據實體類的屬性在資料庫中自動建立一個角色表。

使用者實體類:

@Entity(name = 
           

使用者實體類主要需要實作  UserDetails 接口,并實作接口中的方法。

這裡的字段基本都好了解,幾個特殊的我來稍微說一下:

  1. accountNonExpired、accountNonLocked、credentialsNonExpired、enabled 這四個屬性分别用來描述使用者的狀态,表示賬戶是否沒有過期、賬戶是否沒有被鎖定、密碼是否沒有過期、以及賬戶是否可用。
  2. roles 屬性表示使用者的角色,User 和 Role 是多對多關系,用一個 @ManyToMany 注解來描述。
  3. getAuthorities 方法傳回使用者的角色資訊,我們在這個方法中把自己的 Role 稍微轉化一下即可。

資料模型準備好之後,我們再來定義一個 UserDao:

public 
           

這裡的東西很簡單,我們隻需要繼承 JpaRepository 然後提供一個根據 username 查詢 user 的方法即可。如果小夥伴們不熟悉 Spring Data Jpa 的操作,可以在公衆号背景回複 springboot 擷取松哥手敲的 Spring Boot 教程,裡邊有 jpa 相關操作,也可以看看松哥錄制的視訊教程:Spring Boot + Vue 系列視訊教程。

在接下來定義 UserService ,如下:

@Component
           

我們自己定義的 UserDetailsServiceImpl 需要實作 UserDetailsService 接口,實作該接口,就要實作接口中的方法,也就是 loadUserByUsername。

OK ,如此之後,我們的 CAS Client 現在就開發完成了,接下來啟動 CAS Client,啟動成功後,浏覽器輸入

http://client1.cas.javaboy.org:8080/user/hello

通路 hello 接口,此時會自動跳轉到 CAS Server 上登入,登入的使用者名密碼就是我們存儲在資料庫中的使用者名密碼。登入成功之後,經過兩個重定向,會重新回到 hello 接口。

hello 接口通路成功之後,再去通路

/user/hello

接口,就會發現權限配置也生效了。

這裡比較簡單,我就不給大家截圖了。

3.小結

好啦,今天主要和小夥伴們分享了一下 Spring Security + CAS 單點登入中,如何使用本地資料庫。一個核心的思路是,認證由 CAS Server 來做,權限相關的操作,則還是由 Spring Security 來完成。

好了 ,本文就說到這裡,本文相關案例我已經上傳到 GitHub ,大家可以自行下載下傳:https://github.com/lenve/spring-security-samples

好啦,小夥伴們如果覺得有收獲,記得點個在看鼓勵下松哥哦~

今日幹貨

BCrypt加密怎麼存入資料庫_Spring Boot+CAS 單點登入,如何對接資料庫?

剛剛發表檢視: 13500 回複:135

公衆号背景回複 SpringBoot,免費擷取 274 頁SpringBoot修煉手冊。

繼續閱讀