本部分內容
這部分主要是從客戶端輸入網址到登錄成功
進入主頁
一般來說,輸入的網址會被controller層攔截,但是如果在只輸入了主機,沒有輸入其他的內容那麼就會默認載入template中的index.html網頁
點擊登錄
點擊登錄之後,瀏覽器構造請求體,發送給服務器,服務器進行解析
這裏本來有前端代碼,templates/index.html
,奈何鄙人能力有限,對前端知之甚少,40行爲何就登錄了實在是丈二和尚摸不着頭,往大佬們不吝賜教。
後端捕獲
src/main/java/com/geekq/miaosha/controller/LoginController.java
捕獲到了登錄請求,然後進行處理,接下來就是一行一行的談一談這幾句話
行數 | 作用 |
---|---|
40 | 註解,匹配的請求 |
41 | 註解,有返回體 |
42 | 返回值,狀態碼,輸入值請求體,表單內容 |
43 | 創建狀態碼(默認爲成功) |
44 | 日誌中寫入表單內容 |
45 | 調用userService進行登錄 |
46 | 返回狀態碼 |
1.LoginController
@RequestMapping
首先說什麼是Spring MVC,MVC是Model View Controller縮寫
model是模型,在這兒就是Java相關的實體類
view是視圖,在這兒是渲染出來的html網頁
controller是控制器,在這兒是捕獲請求之後進行處理的模塊
那Spring MVC到底是怎麼個工作流程
看圖說話,服務器接收請求,請求進來了,由前端控制器接收,接收之後根據URL的內容,由分發器分發給其他的控制器,這個控制器處理請求,創建model返回給前端控制器,前端控制器從template文件夾中選取模板,進行渲染,返回給前端控制器,前端控制器向客戶端返回response
requestmapping就是我們前端控制器分發給的控制器,怎麼判斷分發給誰呢,就是在requestmapping後面添加內容,URL去掉前綴,也就是主機,與requestmapping中的value值進行正則匹配,如果能夠匹配上,就由該控制器匹配到的函數處理分發來的請求。
@ResponseBody
這個註解的作用是將這個函數對應返回值反序列化爲JSON對象,並添加到HttpResponse對象中
ResultGeekQ
封裝的一個返回結果類
dologin
這是個自己定的函數名,具體執行哪個函數由@RequestMapping value指定,跟這個函數名無關
@valid
是用來檢驗Bean的,檢驗發送方發送的數據是否有效,比如是不是爲null,或者一些自定義的驗證規則之類的
loginVo
是一個視圖類實體,存儲的是客戶端傳過來的用戶名和密碼
Logger
日之類。給日誌裏面寫入用戶名和密碼。
2.UserService.login()
接着下沉到45行所在的服務層的登錄函數,看看一看登錄的邏輯
行數 | 作用 |
---|---|
131-133 | 如果是空就拋出系統錯誤異常(前端沒檢測到) |
133-135 | 獲取賬號密碼 |
136-145 | 由電話號碼獲取用戶,redis沒有就直接查數據庫,如果沒有電話或者密碼不對就拋出異常 |
147-148 | 向response中添加token用於後續免密碼登錄 |
throw
終止運行後面的代碼,直到有catch捕獲了這個異常
MD5Utils.FormPassToDBPass
將密碼和鹽混合進行加密
Token
這兒是生成一個隨機數用來當令牌,用以識別是不是同一個用戶
addCookie
將cookie加入response,將token放到redis上
3.MiaoshaUser.getByNickName
行數 | 作用 |
---|---|
60-63 | 從redis獲取用戶,不爲空則返回 |
65-69 | 從數據庫獲取用戶,不爲空則返回 |
4.RedisService.get
行數 | 作用 |
---|---|
65 | prefix是過期時間+“nickname” |
66-68 | 從jedisPool中獲取資源 |
70 | 由"nickname"+傳入的key得到真的key |
71 | 由真的key獲取到redis中的value |
72 | 由字符串轉換爲實體類 |
73-75 | try中return並不會真的return 而是在finally執行完了才return |
redis能存儲的數據有以下五種
一般來說都是存儲的字符串
5.UserService.addCookie
行數 | 作用 |
---|---|
179 | 將“tk”+token作爲key存入redis當做session |
180 | 新建cookie創建token字段 |
181 | 設置cookie的最大過期時間 |
182 | 設置cookie的路徑 |
183 | 將cookie加入response |
總結
至此登錄的流程已經到頭了,不知道各位看官到底看沒看懂呢?基本上事無鉅細都給講解了一遍,大家共同進步!在這裏插入代碼片