---01---
默認我們是關掉的。
開啓的話會自動的給我們進行一些安全的配置的。
用戶名是user,密碼是啓動在控制檯的默認的密碼。
兩種策略的。
這個橙色的就是最後的守門員,是判斷我是不是有權限去執行我的api的。
這個就是捕獲橙色的去拋出異常,引導去哪裏授權就是去綠色的裏面。
我們打下斷點試試。
看下是不是login這個地址。
看下流程,執行到這裏:
開始拋出異常。
登錄。
這裏:
再往下:
---
總結:
必須是username和password。
---02---
用戶信息的獲取邏輯:
User是什麼?
---
用戶校驗邏輯。
賬戶過期,賬戶鎖定,密碼過期,賬戶可用。
這裏隨便給一個權限就可以了,以後要講的。
---
密碼的加密和解密
---03---
給一個登錄界面。
登錄流程:
流程加:
可以運行的:
這個要多做下配置,讓security知道是這個路徑。默認是處理的/login路徑的。
---
此時是403
解決跨站請求僞造的防護。
---
html的話就跳到登錄頁,不是就返回json,不能每次跳轉都跳轉的登陸界面的。
執行跳轉之前springsecurity用
把當前的請求緩存到了session中去了。
如何返回狀態碼呢?
---
我不可不能永遠的跳轉到我自己的登陸頁面中去。
如何讓用戶自己配置登陸界面呢?
第一步:
---04---
默認的是登錄成功跳轉到之前的請求繼續訪問。
這個方法登錄成功之後會被調用的。
這個是核心的接口。封裝了認證請求信息(ip,session,userDetail)。
登錄之後我們不用默認的了用我們自己的。
啓動:
登錄成功我的代碼:
登錄失敗我的代碼,雛形
我的代碼:
配置在配置裏面:
訪問輸入錯誤的密碼:
---
自定義成功處理和自定義的失敗處理我們都處理完了。
---
登陸成功之後,自定義跳轉。我們讓用戶自己配置是跳轉還是返回的是json。
第一步:聲明一個枚舉
第二步:
第三步:
第四步:
---
測試:不做任何配置的話就是都返滬的是json。
換了配置之後則:
---05---
源碼。
認證處理的流程說明:
構建了usernamePassWordAuthenticationToken對象。
看下super,父類的構造函數要傳一組權限進來的。
需要傳遞權限進來的。
再來:
我們看下這個類,這個類本身是不包含什麼邏輯的,他的作用是管理這個類的:
我們點擊authenticate進入方法,這個for循環就是傳進來一個一個,看下支不支持當前的。
不同的provider支持的authentication是不一樣的。
---
這裏真正的執行我的校驗邏輯的。
我們再點進去:
調用的結果就是我們拿出來的在數據庫拿出來的用戶名和密碼等信息。
接着往下:我們拿到user之後
我們進行預檢查:
再來:
附加的檢查,在抽線的類裏面是一個抽象的方法,Dao是一個具體的實現。
就是密碼的加密解密器看下是不是匹配。
再來:
檢查四個boolean的最後一個。
最後一步:
進入:
重新new了一次userNamePasswordAuthenticationToken,是多個參數的。
對比這裏:
---
全部完畢最後我們返回回來了:
再往下:
這個就是調用我們自己寫的登錄成功的處理器了。
---
上面的是登錄成功的情況,我們看下登錄失敗的情況,會有異常並且捕獲。
調用我們自己寫的認證失敗的處理器。
------
認證的結果我們是如何再多個請求中共享的。
我們先看下securityContext。
它只是包裝了authentication。
其實就是Threadlocal的封裝。就是線程級別的全局變量。
一般來說請求和響應是在一個方法中完成的。
最後是誰來用的呢?
這個的作用:
當請求進來的時候檢查session是不是有securityContext,有的話就拿出來放在線程裏面。
回來的時候檢查線程,有的話就拿出來放在session裏面去。
---
如何獲取認證信息。
也可以這樣寫:
---06---