SpringBoot實現(xiàn)網(wǎng)站的登陸注冊邏輯記錄
該文章主要是為了整理之前學習項目中的知識點,并進行一定程度的理解。
技術(shù)列表:
- SpringBoot
- MySQL
- redis
- JWT
用戶登錄邏輯:
首先打開前端登錄頁面,F(xiàn)12進行網(wǎng)頁URL抓?。?/p>
隨便輸入信息,查看請求后端的地址:
地址:
請求 URL: http://localhost:8888/login 請求方法: POST 狀態(tài)代碼: 200 遠程地址: [::1]:8888 引用站點策略: strict-origin-when-cross-origin
很明顯,前端用戶輸入賬戶,通過post請求傳遞給后端接收:
@RequestMapping("/login") public class LoginController { @Autowired private LoginService loginService; @PostMapping public Result login(@RequestBody LoginParam loginParam){ return loginService.login(loginParam); } }
這里為了方便傳輸,把前端參數(shù)封裝成對象傳入.
后端驗證查詢賬戶的邏輯操作:
- 獲取賬戶密碼
- 判斷賬戶密碼是否為空
- 密碼加密,采用MD5加密+鹽的操作
- 通過處理的賬戶密碼(加密)進行數(shù)據(jù)庫查詢
String pwd = DigestUtils.md5Hex(password + salt); //根據(jù)賬號和加密的密碼進行數(shù)據(jù)庫的查找 SysUser sysUser = sysUserService.findUser(account, pwd);
查找成功,使用JWT工具包生成token,保存到redis中
向前端返回生成的token,檢查token,進行登錄
{ "code": 200, "success": true, "msg": "success", "data": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzQ4OTY1MDIsInVzZXJJZCI6MSwiaWF0IjoxNjM0MDA3NDcwfQ.9elJSiGa-QARLqKGLTeFW9go7ujsArd0QV_HihHfEm0" }
這里就實現(xiàn)了JWT和redis實現(xiàn)簡單的登錄驗證功能。
用戶注冊邏輯:
前端請求:
前端傳遞賬戶名、密碼、昵稱,調(diào)用http://localhost:8888/register地址進行post傳參,后端接收參數(shù)
1、獲取前端參數(shù),判斷參數(shù)是否合法(是否為空)
2、判斷賬戶是否存在,存在,返回賬戶已經(jīng)被注冊了的json數(shù)據(jù)
3、不存在、注冊賬戶(生成User對象)調(diào)用保存接口,保存的時候需要將密碼進行MD5+鹽 加密
4、生成token令牌
String token = JWTUtils.createToken(sysUser.getId());
5、存入redis 并返回
這里存入redis是因為,注冊成功后會跳轉(zhuǎn)到前端頁面,前端頁面會去redis中找user的信息進行對比,如果存在,顯示登錄,反之登錄失敗。
6、注意加上事務(wù),一旦中間的任何過程出現(xiàn)問題,注冊的用戶需要回滾(防止臟數(shù)據(jù))
將生成得token傳遞給前端:
{ "code": 200, "success": true, "msg": "success", "data": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzQ4NDc0MzQsInVzZXJJZCI6MTQ0NzU1MjU3MDYzMDQzNDgxNywiaWF0IjoxNjMzOTU4NDAxfQ.zn5meG_lUWROuz7TmkUGS0MTjO1-TDQa42uM_-uhXqs" }
前端調(diào)用該接口,:
http://localhost:8888/users/currentUser
前端將獲得token傳遞給后端接口currentUser,在redis中找到user信息,校驗信息,解析數(shù)據(jù),返回用戶基本信息,前端解析
前端index.js部分代碼段:
login({commit}, user) { return new Promise((resolve, reject) => { login(user.account, user.password).then(data => { if(data.success){ commit('SET_TOKEN', data.data) setToken(data.data) resolve() }else{ reject(data.msg) } }).catch(error => { reject(error) }) })
到這里就是簡單的登錄注冊的功能,上述內(nèi)容都是部分代碼段,如果有需要學習的可以評論留言。
參考文獻:
【碼神之路】博客開發(fā);
總結(jié)
到此這篇關(guān)于SpringBoot實現(xiàn)網(wǎng)站登陸注冊邏輯的文章就介紹到這了,更多相關(guān)SpringBoot登陸注冊邏輯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解如何獨立使用ribbon實現(xiàn)業(yè)務(wù)客戶端負載均衡
這篇文章主要為大家介紹了詳解如何獨立使用ribbon實現(xiàn)業(yè)務(wù)客戶端負載均衡,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06java 畫pdf用itext調(diào)整表格寬度、自定義各個列寬的方法
這篇文章主要介紹了java 畫pdf用itext調(diào)整表格寬度、自定義各個列寬的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01java并發(fā)編程專題(二)----如何創(chuàng)建并運行java線程
這篇文章主要介紹了java并發(fā)編程如何創(chuàng)建并運行java線程,文中講解非常詳細,示例代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-06-06Spring如何消除代碼中的if-else/switch-case
這篇文章主要給大家介紹了關(guān)于Spring如何消除代碼中if-else/switch-case的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-04-04