SpringBootSecurity學習(12)先後端分離版之簡單登陸

先後端分離

前面討論了springboot下security不少經常使用的功能,其它的功能建議參考官方文檔學習。網頁版登陸的形式如今已經不是最流行的了,最流行的是先後端分離的登陸方式,前端單獨成爲一個項目,與後臺的交互,包括登陸認證和受權都是由異步接口來實現。在先後端不分離的應用模式中,前端頁面看到的效果都是由後端控制,由後端渲染頁面或重定向,也就是後端須要控制前端的展現,前端與後端的耦合度很高。這種應用模式比較適合純網頁應用,html

file

可是當後端對接App時,App可能並不須要後端返回一個HTML網頁,而僅僅是數據自己,因此後端本來返回網頁的接口再也不適用於前端App應用,爲了對接App後端還需再開發一套接口。前端

在先後端分離的應用模式中,後端僅返回前端所需的數據,再也不渲染HTML頁面,再也不控制前端的效果。至於前端用戶看到什麼效果,從後端請求的數據如何加載到前端中,都由前端本身決定,網頁有網頁的處理方式,App有App的處理方式,但不管哪一種前端,所需的數據基本相同,後端僅需開發一套邏輯對外提供數據便可。在先後端分離的應用模式中 ,前端與後端的耦合度相對較低。git

file

在先後端分離的應用模式中,咱們一般將後端開發的每一個視圖都稱爲一個接口,或者API,前端經過訪問接口來對數據進行增刪改查。spring

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

先後端分離後,出現的經典問題就是跨域問題。跨域,指的是瀏覽器不能執行其餘網站的腳本。它是由瀏覽器的同源(域名,協議,端口)策略形成的,是瀏覽器對JavaScript施加的安全限制。具體的跨域理論跨域自行查詢學習。在security中,解決跨域問題是很是簡單的。只須要增長几行配置便可。數據庫

簡單示例

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

file

修改springboot默認配置文件,添加默認用戶:segmentfault

file

啓動類不用修改,添加一個接口:後端

file

下面來配置security配置類,首先配置登陸,異步登陸再也不須要後臺配置登陸頁面地址,只須要配置登陸參數和api地址便可:api

file

而後加上受權配置和登陸成功的處理:跨域

file

最後加上csrf配置:

file

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

file

返回了一個json形式的登陸成功消息。

簡單測試

來進行一個簡單的測試,啓動項目,使用postman直接訪問hello接口:

file

訪問不成功,返回了登陸的html頁面,關於沒有權限的處理,後面會作的更加友好。下面用接口進行登陸:

file

能夠看到正常登陸成功,postman中也多了一個cookie信息:

file

這和瀏覽器的cookie是同樣的,刪掉之後就成了未登陸狀態。如今訪問hello接口,能夠看到正常的效果:

file

添加跨域

添加跨域配置很是簡單,首先在security配置中調用cors方法:

file

而後咱們打開springboot的官方文檔,查看跨域配置:

file

能夠看到,在springboot中,全局的跨域配置很是簡單,咱們來模仿寫一個bean:

file

這樣跨域就配置好了。

其它處理器

來看一下登陸失敗(好比帳號錯誤)時的處理器:

file

配置登陸失敗處理器:

file

測試:

file

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

file

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

file

測試,在未登陸的狀況下,直接訪問hello接口:

file

如今提示友好了不少。最後看一下權限不足處理器:

file

配置權限不足處理器:

file

而後開啓方法級別的權限註解,在hello方法上面配置HELLO權限:

file

在配置文件中,給默認用戶admin配置一個其餘角色:

file

而後重啓項目,首先在postman中,進行登陸,而後再訪問hello接口:

file

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

說明

上面是一個簡單的先後端分離的登陸的例子。這裏只應用了幾個簡單的功能,不過前面討論過的從數據庫中查詢用戶,動態權限,共享session,記住我等等的功能,也均可以加入到先後端分離的登陸功能中,這些內容的使用和前面網頁版的登陸沒有什麼區別。使用這些徹底能夠知足先後端分離的登陸和受權功能。

代碼地址 : https://gitee.com/blueses/spr... 12

相關文章
相關標籤/搜索