最近幾天在改造項目,需要將gateway整合security在一起進行認證和鑑權,之前gateway和auth是兩個服務,auth是shiro寫的一個,一個filter和一個配置,內容很簡單,生成token,驗證token,沒
2021-06-10 13:17:40
最近幾天在改造項目,需要將gateway整合security在一起進行認證和鑑權,之前gateway和auth是兩個服務,auth是shiro寫的一個,一個filter和一個配置,內容很簡單,生成token,驗證token,沒有其他的安全檢查,然後讓對項目進行重構。
先是要整合gateway和shiro,然而因為gateway是webflux,而shiro-spring是webmvc,所以沒搞成功,如果有做過併成功地,請告訴我如何進行整合,非常感謝。
那整合security呢,因為spring cloud gateway基於webflux,所以網上很多教程是用不了的,webflux的配置會有一些變化,具體看如下程式碼示例:
上面的示例程式碼,是我開源項目中的一段,一般的配置就如上面寫的,就可以使用了,但是由於我們之前的項目中的是shiro,然後有一個自定義的加密解密的邏輯。
首先說明一下情況,之前那一套加密(前端MD5,不加鹽,然後資料庫儲存的是加鹽後的資料和對應的鹽(每個賬號一個),要登入比較之前對密碼要獲取動態的鹽,然後加鹽進行MD5,再進行對比,但是在配置的時候是沒法獲取某一使用者的鹽值)
所以上面的一版配置是沒法通過驗證的,必須在驗證之前,給請求的密碼混合該賬號對應的鹽進行二次加密後在對比,但是這裡就有問題了:
security 框架提供的幾個加密解密工具沒有MD5的方式;security 配置加密解密方式的時候,無法填入動態的賬號的加密鹽;對於第一個問題還好處理,解決方式是:自定義加密解密方式,然後注入到配置類中,示例如下:
第二個問題的解決辦法,找了很多資料,也沒有找到,後來檢視security的源碼發現,可以在UserDetailsService介面的findByUsername()方法中,在返回UserDetails實現的時候,使用預設實現User的UserBuilder內部類來解決這個問題,因為UserBuilder類中有一個屬性,passwordEncoder屬性,它是Fucntion<String, String>類型的,預設實現是 password -> password,即對密碼不做任何處理,先看下它的源碼:
再看下解決問題之前的findByUsername()方法:
那找到了問題的解決方法,就來改程式碼了,如下所示:
新增一個程式碼處理方法
然後新增builder鏈
然後跑一下程式碼,請求登入介面,就登陸成功了。
相關文章
最近幾天在改造項目,需要將gateway整合security在一起進行認證和鑑權,之前gateway和auth是兩個服務,auth是shiro寫的一個,一個filter和一個配置,內容很簡單,生成token,驗證token,沒
2021-06-10 13:17:40
不知道大家在多年前世界網際網路大會上,雷軍跟蘋果高階副總裁塞維爾的對話,雷軍表示希望在未來五年到十年,能夠成為手機領域的世界老大。當時塞維爾只是簡單回答一句:這說起來總
2021-06-10 13:16:48
今年的高考結束了,有一批新人要走入大學,也有一批人即將大學畢業。今年有909萬畢業生,6月10日,B站給全國的大學畢業生送上了畢業歌《你眼裡的光》,不少網友表示很有誠心,也很催淚,
2021-06-10 13:16:05
小米今年更新了MIX系列機型,這是其首款摺疊屏旗艦MIX FOLD,售價9999元起。但要知道,MIX FOLD目前定價偏高,不適合批量出貨,產品量也不大,所以業內一直有訊息稱小米也在準備新的MIX
2021-06-10 12:55:13
隨著歐洲盃和奧運會兩大體育盛事的即將到來,適合觀看比賽的大屏電視成為了不少朋友618購物清單裡的選項。如今的大屏電視選擇多且表現好,像小米Redmi Max 86英寸、OPPO智慧電
2021-06-10 12:35:28
數字化辦公時代,協同辦公賦予企業高效的同時,也對企業原有IT系統產生了不小的挑戰,相對系統卡頓、網路延遲、掉線宕機等傳統企業IT頑疾,協同辦公無縫連線、高效協同的剛需不僅改
2021-06-10 12:34:28