SpringMVC實(shí)現(xiàn)用戶(hù)登錄全過(guò)程
1、需求分析
用戶(hù)輸入賬號(hào)與密碼,后端校驗(yàn)密碼是否正確:
(小型項(xiàng)目?jī)H作階段性學(xué)習(xí)練習(xí),此處不使用數(shù)據(jù)庫(kù)連接,使用session保存客戶(hù)端信息)
- 賬號(hào)與密碼不匹配(或稱(chēng)密碼不正確):彈窗提示;
- 賬號(hào)與密碼匹配(密碼正確):跳轉(zhuǎn)至首頁(yè)顯示登錄用戶(hù)信息。
并在后續(xù)再訪問(wèn)中可以獲取到登錄用戶(hù)信息;
對(duì)于后端開(kāi)發(fā)人員,不涉及前端頁(yè)面的展示,只需要提供兩個(gè)功能:
- (1)登錄頁(yè)面:通過(guò)賬號(hào)與密碼校驗(yàn)輸入的賬號(hào)密碼是否正確;
- (2)首頁(yè):告知前端當(dāng)前登錄用戶(hù),如果當(dāng)前已有用戶(hù)登錄,返回登錄人的信息;
如果沒(méi)有,返回空;
2、接口定義
2.1 校驗(yàn)接口
(1)請(qǐng)求方式:/user/login
(2)請(qǐng)求方式:GET
(3)接口描述:校驗(yàn)賬號(hào)密碼是否正確
請(qǐng)求參數(shù)
| 參數(shù)名 | 類(lèi)型 | 是否必須 | 備注 |
| 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 查詢(xún)登錄用戶(hù)接口
(1)請(qǐng)求路徑:/user/getLoginUser
(2)請(qǐng)求方式:GET
(3)接口描述:查詢(xún)當(dāng)前登錄的用戶(hù)
請(qǐng)求參數(shù)
無(wú)
響應(yīng)數(shù)據(jù)
(1)Content-Type:text/html
(2)響應(yīng)內(nèi)容:admin
4、服務(wù)器代碼
包括 校驗(yàn)接口 與 查詢(xún)登錄用戶(hù)接口
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)賬戶(hù)名與密碼
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中獲取登錄用戶(hù)
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>用戶(hù)登錄</h1>
用戶(hù)名:<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("用戶(hù)名與密碼不匹配");
}
}
});
}
</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>用戶(hù)登錄首頁(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è)面如下:

輸入用戶(hù)名:admin,密碼:admin并點(diǎn)擊登錄:

點(diǎn)擊登錄可以實(shí)現(xiàn)登錄頁(yè)面跳轉(zhuǎn)至首頁(yè),并顯示登錄人信息;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring中一個(gè)少見(jiàn)的引介增強(qiáng)IntroductionAdvisor
這篇文章主要為大家介紹了Spring中一個(gè)少見(jiàn)的引介增強(qiáng)IntroductionAdvisor實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Java Web端程序?qū)崿F(xiàn)文件下載的方法分享
這篇文章主要介紹了Java Web端程序?qū)崿F(xiàn)文件下載的方法分享,包括一個(gè)包含防盜鏈功能的專(zhuān)門(mén)針對(duì)圖片下載的程序代碼示例,需要的朋友可以參考下2016-05-05
Java中的StampedLock實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Java中的StampedLock實(shí)現(xiàn)原理詳解,ReentrantReadWriteLock采用悲觀讀,第一個(gè)讀線程拿到鎖后,第二個(gè)/第三個(gè)讀線程可以拿到鎖,特別是在讀線程很多,寫(xiě)線程很少時(shí),需要的朋友可以參考下2024-01-01
java中vector與hashtable操作實(shí)例分享
java中vector與hashtable操作實(shí)例,有需要的朋友可以參考一下2014-01-01
IntelliJ IDEA 2017.1.4 x64配置步驟(介紹)
下面小編就為大家?guī)?lái)一篇IntelliJ IDEA 2017.1.4 x64配置步驟(介紹)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
spring容器啟動(dòng)實(shí)現(xiàn)初始化某個(gè)方法(init)
這篇文章主要介紹了spring容器啟動(dòng)實(shí)現(xiàn)初始化某個(gè)方法(init),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法
java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-03-03
java環(huán)境變量path和classpath的配置
這篇文章主要為大家詳細(xì)介紹了java系統(tǒng)環(huán)境變量path和classpath的配置過(guò)程,感興趣的小伙伴們可以參考一下2016-07-07

