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ù)再訪問(wèn)中可以獲取到登錄用戶信息;
對(duì)于后端開(kāi)發(fā)人員,不涉及前端頁(yè)面的展示,只需要提供兩個(gè)功能:
- (1)登錄頁(yè)面:通過(guò)賬號(hào)與密碼校驗(yàn)輸入的賬號(hào)密碼是否正確;
- (2)首頁(yè):告知前端當(dāng)前登錄用戶,如果當(dāng)前已有用戶登錄,返回登錄人的信息;
如果沒(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ù)名 | 類型 | 是否必須 | 備注 |
| 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)文章
mybatisplus實(shí)現(xiàn)自動(dòng)創(chuàng)建/更新時(shí)間的項(xiàng)目實(shí)踐
Mybatis-Plus提供了自動(dòng)填充功能,可以通過(guò)實(shí)現(xiàn)MetaObjectHandler接口來(lái)實(shí)現(xiàn)自動(dòng)更新時(shí)間的功能,本文就來(lái)介紹一下mybatisplus實(shí)現(xiàn)自動(dòng)創(chuàng)建/更新時(shí)間的項(xiàng)目實(shí)踐,感興趣的可以了解下2024-01-01
SpringBoot啟動(dòng)失敗的解決方法:A component required a&nb
這篇文章主要介紹了解決SpringBoot啟動(dòng)失?。篈 component required a bean of type ‘xxxxxxx‘ that could not be found.,目前解決方法有兩種,一種是不注入bean的方式,另一種是使用@Component的方式,本文給大家詳細(xì)講解,需要的朋友可以參考下2023-02-02
java微信小程序步數(shù)encryptedData和開(kāi)放數(shù)據(jù)解密的實(shí)現(xiàn)
這篇文章主要介紹了java微信小程序步數(shù)encryptedData和開(kāi)放數(shù)據(jù)解密的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
SpringBoot發(fā)送郵件功能 驗(yàn)證碼5分鐘過(guò)期
這篇文章主要為大家詳細(xì)介紹了SpringBoot發(fā)送郵件功能,驗(yàn)證碼5分鐘過(guò)期,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
javaWeb項(xiàng)目部署到阿里云服務(wù)器步驟詳解
本篇文章主要介紹了javaWeb項(xiàng)目部署到阿里云服務(wù)器步驟詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05

