首頁>技術>

前後端分離

前面討論了springboot下security很多常用的功能,其它的功能建議參考官方文件學習。網頁版登入的形式現在已經不是最流行的了,最流行的是前後端分離的登入方式,前端單獨成為一個專案,與後臺的互動,包括登入認證和授權都是由非同步介面來實現。在前後端不分離的應用模式中,前端頁面看到的效果都是由後端控制,由後端渲染頁面或重定向,也就是後端需要控制前端的展示,前端與後端的耦合度很高。這種應用模式比較適合純網頁應用,

但是當後端對接App時,App可能並不需要後端返回一個HTML網頁,而僅僅是資料本身,所以後端原本返回網頁的介面不再適用於前端App應用,為了對接App後端還需再開發一套介面。

在前後端分離的應用模式中,後端僅返回前端所需的資料,不再渲染HTML頁面,不再控制前端的效果。至於前端使用者看到什麼效果,從後端請求的資料如何載入到前端中,都由前端自己決定,網頁有網頁的處理方式,App有App的處理方式,但無論哪種前端,所需的資料基本相同,後端僅需開發一套邏輯對外提供資料即可。在前後端分離的應用模式中 ,前端與後端的耦合度相對較低。

在前後端分離的應用模式中,我們通常將後端開發的每個檢視都稱為一個介面,或者API,前端通過訪問介面來對資料進行增刪改查。

前後端分離出現的跨域問題

前後端分離後,出現的經典問題就是跨域問題。跨域,指的是瀏覽器不能執行其他網站的指令碼。它是由瀏覽器的同源(域名,協議,埠)策略造成的,是瀏覽器對JavaScript施加的安全限制。具體的跨域理論跨域自行查詢學習。在security中,解決跨域問題是非常簡單的。只需要增加幾行配置即可。

簡單示例

來寫一個簡單的例子來實現前後端分離的非同步登入。首先引入依賴:

修改springboot預設配置檔案,新增預設使用者:

啟動類不用修改,新增一個介面:

下面來配置security配置類,首先配置登入,非同步登入不再需要後臺配置登入頁面地址,只需要配置登入引數和api地址即可:

然後加上授權配置和登入成功的處理:

最後加上csrf配置:

最簡單的配置已經完成了,最後來看一下登入成功的處理:

返回了一個json形式的登入成功訊息。

簡單測試

來進行一個簡單的測試,啟動專案,使用postman直接訪問hello介面:

訪問不成功,返回了登入的html頁面,關於沒有許可權的處理,後面會做的更加友好。下面用介面進行登入:

可以看到正常登入成功,postman中也多了一個cookie資訊:

這和瀏覽器的cookie是一樣的,刪掉以後就成了未登入狀態。現在訪問hello介面,可以看到正常的效果:

新增跨域

新增跨域配置非常簡單,首先在security配置中呼叫cors方法:

然後我們開啟springboot的官方文件,檢視跨域配置:

可以看到,在springboot中,全域性的跨域配置非常簡單,我們來模仿寫一個bean:

這樣跨域就配置好了。

其它處理器

來看一下登入失敗(比如賬號錯誤)時的處理器:

配置登入失敗處理器:

測試:

來看一下登入超時或者未登入的異常處理器:

配置登入超時或者未登入處理器:

測試,在未登入的情況下,直接訪問hello介面:

現在提示友好了很多。最後看一下許可權不足處理器:

配置許可權不足處理器:

然後開啟方法級別的許可權註解,在hello方法上面配置HELLO許可權:

在配置檔案中,給預設使用者admin配置一個其他角色:

然後重啟專案,首先在postman中,進行登入,然後再訪問hello介面:

此時就會根據處理器的結果提示許可權不足。

說明

上面是一個簡單的前後端分離的登入的例子。這裡只應用了幾個簡單的功能,不過前面討論過的從資料庫中查詢使用者,動態許可權,共享session,記住我等等的功能,也都可以加入到前後端分離的登入功能中,這些內容的使用和前面網頁版的登入沒有什麼區別。使用這些完全可以滿足前後端分離的登入和授權功能。

程式碼地址 : https://gitee.com/blueses/spring-boot-security 12

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 「譯」什麼是蒙特卡洛樹搜尋