springsecurity的認證授權有兩種方式:基於session和基於token。由於token的使用會比較多,下面講token的這種方式。
整個大概的流程是這樣的:
1.用戶訪問服務器進行登錄,服務器返回登錄頁面給用戶
2.用戶填寫用戶名和密碼,並提交給服務器
3.服務器收到后,由springsecurity來進行認證校驗,主要是查詢數據庫用戶名和密碼,判斷是否是合法的用戶,如果是,則認證成功,並且從數據庫中查出該用戶的權限列表
4.將用戶名和權限列表保存到redis中,用戶名為key,權限列表為value;通常每個權限用其code來表示,在權限表會有一個code字段,到時候redis存的權限列表,其實就是一系列的code值。
5.此時根據用戶名等信息生成token,把token保存在cookie中並返回給用戶;此時用戶就已經認證成功了,接下來就是授權了
6.當用戶再次訪問時,從cookie中取出token信息,放到請求中的header請求頭,隨着請求發送給服務器
7.服務器從header頭中拿到token,並解析token拿到用戶名
8.查詢redis,根據用戶名,查詢該用戶的權限列表
9.springsecurity根據權限列表,為用戶此請求賦予相應的權限
10.用戶請求進行相應的操作
大概流程是這樣的,我們可以知道,實際上權限列表是保存在數據庫中的,但是springsecurity會從redis取用戶的權限,再賦予用戶該請求的權限