SpringMVC實(shí)現(xiàn)用戶登錄全過(guò)程
1、需求分析
用戶輸入賬號(hào)與密碼,后端校驗(yàn)密碼是否正確:
(小型項(xiàng)目?jī)H作階段性學(xué)習(xí)練習(xí),此處不使用數(shù)據(jù)庫(kù)連接,使用session保存客戶端信息)
- 賬號(hào)與密碼不匹配(或稱密碼不正確):彈窗提示;
- 賬號(hào)與密碼匹配(密碼正確):跳轉(zhuǎn)至首頁(yè)顯示登錄用戶信息。
并在后續(xù)再訪問中可以獲取到登錄用戶信息;
對(duì)于后端開發(fā)人員,不涉及前端頁(yè)面的展示,只需要提供兩個(gè)功能:
- (1)登錄頁(yè)面:通過(guò)賬號(hào)與密碼校驗(yàn)輸入的賬號(hào)密碼是否正確;
- (2)首頁(yè):告知前端當(dāng)前登錄用戶,如果當(dāng)前已有用戶登錄,返回登錄人的信息;
如果沒有,返回空;
2、接口定義
2.1 校驗(yàn)接口
(1)請(qǐng)求方式:/user/login
(2)請(qǐng)求方式:GET
(3)接口描述:校驗(yàn)賬號(hào)密碼是否正確
請(qǐng)求參數(shù)
參數(shù)名 | 類型 | 是否必須 | 備注 |
userName | String | 是 | 校驗(yàn)的賬號(hào) |
password | String | 是 | 校驗(yàn)的密碼 |
響應(yīng)數(shù)據(jù)
(1)Content-Type:text/html
(2)響應(yīng)內(nèi)容:
- true:賬號(hào)密碼驗(yàn)證成功;
- false:賬號(hào)密碼驗(yàn)證失??;
2.2 查詢登錄用戶接口
(1)請(qǐng)求路徑:/user/getLoginUser
(2)請(qǐng)求方式:GET
(3)接口描述:查詢當(dāng)前登錄的用戶
請(qǐng)求參數(shù)
無(wú)
響應(yīng)數(shù)據(jù)
(1)Content-Type:text/html
(2)響應(yīng)內(nèi)容:admin
4、服務(wù)器代碼
包括 校驗(yàn)接口 與 查詢登錄用戶接口
package com.example.demo.controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @RequestMapping("/user") @RestController public class UserController { @RequestMapping("/login") public boolean login(String userName, String password, HttpSession session){ // 第一步:校驗(yàn)參數(shù)合法性方法 // 校驗(yàn)參數(shù)合法性方法1:普通判別式 // if(userName == null || userName.length()==0 || password == null || password.length()==0){ // return false; // } // 校驗(yàn)參數(shù)合法性方法2:使用Spring提供的方法 if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){ return false; } // 第二步:校驗(yàn)賬戶名與密碼 if("admin".equals(userName) && "admin".equals(password)){ // 第三步:設(shè)置session session.setAttribute("username","admin"); return true; } return false; } @RequestMapping("/getUserInfo") public String getUserInfo(HttpServletRequest request){ // 從session中獲取登錄用戶 HttpSession session = request.getSession(false); String userName = null; if(session != null){ userName = (String)session.getAttribute("username"); } return userName; } }
5、前端代碼
5.1 登錄頁(yè)面login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登錄頁(yè)面</title> </head> <body> <h1>用戶登錄</h1> 用戶名:<input name="userName" type="text" id="userName"><br> 密碼:<input name="password" type="password" id="password"><br> <input type="button" value="登錄" onclick="login()"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <script> function login() { $.ajax({ url:"/user/login", type:"post", data:{ "userName": $("#userName").val(), "password": $("#password").val() }, // 回調(diào)函數(shù) success:function(result){ // result表示后端返回的結(jié)果 if(result){ // 完成頁(yè)面跳轉(zhuǎn) // 方式1: location.href = "/index.html"; // 方式2: // location.assign(); }else{ alert("用戶名與密碼不匹配"); } } }); } </script> </body> </html>
5.2 首頁(yè)頁(yè)面index.html
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>用戶登錄首頁(yè)</title> </head> <body> 登錄人: <span id="loginUser"></span> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <script> // 需要在頁(yè)面加載時(shí)就要調(diào)用后端請(qǐng)求 $.ajax({ url:"/user/getUserInfo", type:"get", success:function(username){ $("#loginUser").text(username); } }) </script> </body> </html>
6、運(yùn)行測(cè)試
使用本地回環(huán)URL: http://127.0.0.1:8080/login.html
登錄頁(yè)面如下:
輸入用戶名:admin,密碼:admin并點(diǎn)擊登錄:
點(diǎn)擊登錄可以實(shí)現(xiàn)登錄頁(yè)面跳轉(zhuǎn)至首頁(yè),并顯示登錄人信息;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring中一個(gè)少見的引介增強(qiáng)IntroductionAdvisor
這篇文章主要為大家介紹了Spring中一個(gè)少見的引介增強(qiáng)IntroductionAdvisor實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Java Web端程序?qū)崿F(xiàn)文件下載的方法分享
這篇文章主要介紹了Java Web端程序?qū)崿F(xiàn)文件下載的方法分享,包括一個(gè)包含防盜鏈功能的專門針對(duì)圖片下載的程序代碼示例,需要的朋友可以參考下2016-05-05Java中的StampedLock實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Java中的StampedLock實(shí)現(xiàn)原理詳解,ReentrantReadWriteLock采用悲觀讀,第一個(gè)讀線程拿到鎖后,第二個(gè)/第三個(gè)讀線程可以拿到鎖,特別是在讀線程很多,寫線程很少時(shí),需要的朋友可以參考下2024-01-01java中vector與hashtable操作實(shí)例分享
java中vector與hashtable操作實(shí)例,有需要的朋友可以參考一下2014-01-01IntelliJ IDEA 2017.1.4 x64配置步驟(介紹)
下面小編就為大家?guī)?lái)一篇IntelliJ IDEA 2017.1.4 x64配置步驟(介紹)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06spring容器啟動(dòng)實(shí)現(xiàn)初始化某個(gè)方法(init)
這篇文章主要介紹了spring容器啟動(dòng)實(shí)現(xiàn)初始化某個(gè)方法(init),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法
java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-03-03java環(huán)境變量path和classpath的配置
這篇文章主要為大家詳細(xì)介紹了java系統(tǒng)環(huán)境變量path和classpath的配置過(guò)程,感興趣的小伙伴們可以參考一下2016-07-07