一個秒殺系統的登錄系統到底是怎麼工作的

本部分內容

這部分主要是從客戶端輸入網址到登錄成功

進入主頁

一般來說,輸入的網址會被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

總結

至此登錄的流程已經到頭了,不知道各位看官到底看沒看懂呢?基本上事無鉅細都給講解了一遍,大家共同進步!在這裏插入代碼片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章