SpringBoot實現(xiàn)點餐系統(tǒng)的登錄與退出功能流程詳解
一.登錄功能前置
首先,我們需要在數(shù)據(jù)庫中建立對應(yīng)的表…

基于人員登錄功能,OOP的模式告訴我們要創(chuàng)建員工對應(yīng)的實體類(Lombok自動生成getter,setter)就像這樣:
@Data
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String username; //用戶名
private String name;
private String password;
private String phone;
private String sex;
private String idNumber;//身份證號碼
private Integer status; //狀態(tài)碼
private LocalDateTime createTime;
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
}數(shù)據(jù)層設(shè)計:

基于SpringBoot+MP配置工作變得十分的簡單,對于數(shù)據(jù)層我們只需要通過繼承mp的接口即可:

二.登錄流程設(shè)計
首先進行的應(yīng)該是前后端協(xié)議聯(lián)調(diào),需要把返回給前端的數(shù)據(jù)封裝成一個實體R,R中定義各種狀態(tài)碼,登陸成功則調(diào)用成功方法返回數(shù)據(jù)對象,失敗則調(diào)用失敗方法返回一則自定義消息
@Data
public class R<T> {
private Integer code; //編碼:1成功,0和其它數(shù)字為失敗
private String msg; //錯誤信息
private T data; //數(shù)據(jù)
private Map map = new HashMap(); //動態(tài)數(shù)據(jù)
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1;
return r;
}
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}
public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}
}對于登錄的請求路徑,我們設(shè)置為“login”,登陸方法也同名
當(dāng)我們輸入了密碼點擊了登錄也就對應(yīng)一次請求的發(fā)生,其次就是Controller層對于登錄流程的開發(fā)
1、將頁面提交的密碼password進行md5加密處理
2、根據(jù)頁面提交的用戶名username查詢數(shù)據(jù)庫
3、如果沒有查詢到則返回登錄失敗結(jié)果
4、密碼比對,如果不一致則返回登錄失敗結(jié)果
5、查看員工狀態(tài),如果為已禁用狀態(tài),則返回員工已禁用結(jié)果
6、登錄成功,將員工id存入Session并返回登錄成功結(jié)果

首先,對于加密操作:
我們通過boot注入Service層的實體類后,就可以從每一次的請求成功中而獲得的對象里拿到密碼,然后進行加密操作

加密完成后,我們需要從對象里拿到username來查數(shù)據(jù)庫,由于mp的優(yōu)勢,以前復(fù)雜的SQL操作現(xiàn)在就變得十分簡單:

注:這里為什么可以直接getOne()?大家想過嗎
因為在建表之初,對于username設(shè)置了unique索引,進行了唯一約束,所以可以直接getOne,得到employee對象
其次,針對查詢完成后的結(jié)果emp,又有了以下幾種判定
① 如果數(shù)據(jù)庫中沒有查詢到則返回登錄失敗
if (emp == null) {
return R.error("登陸失敗啦~");
}
②如果在查詢成功后密碼比對不一致則返回登陸失敗
if (!(emp.getPassword().equals(passWord))) {
return R.error("登陸成功啦~");
}
③如果員工狀態(tài)不正確,則返回登陸失敗
if (emp.getStatus() == 0) {
return R.error("您的賬號已被禁用,請稍后重試!");
}
④如果上述三個if都不滿足,則登陸成功就將員工id存入Session并返回登陸成功結(jié)果
@PostMapping("/logout")
public R<String> logout(HttpServletRequest request){
//清理Session中保存的當(dāng)前登錄員工的id
request.getSession().removeAttribute("employee");
return R.success("退出成功");
}
完整的登錄流程如下:
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
/**
* 登陸開發(fā)
*/
@PostMapping("/login")
public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee) {
// 頁面提交的密碼進行MD5加密
String passWord = employee.getPassword();
passWord = DigestUtils.md5DigestAsHex(passWord.getBytes());
//根據(jù)頁面提交的用戶名來查詢數(shù)據(jù)庫
LambdaQueryWrapper<Employee> lqw = new LambdaQueryWrapper<>();
lqw.eq(Employee::getUsername, employee.getUsername());
Employee emp = employeeService.getOne(lqw);
//如果數(shù)據(jù)庫中沒有查詢到則返回登錄失敗
if (emp == null) {
return R.error("登陸失敗啦~");
}
//在查詢成功后進行密碼比對
if (!(emp.getPassword().equals(passWord))) {
return R.error("登陸失敗啦~");
}
//查看員工狀態(tài)
if (emp.getStatus() == 0) {
return R.error("您的賬號已被禁用,請稍后重試!");
}
//登陸成功就將員工id存入Session并返回登陸成功結(jié)果
request.getSession().setAttribute("employee", emp.getId());
return R.success(emp); //登陸成功并返回對象
}
}從后端的角度,當(dāng)我完成查詢操作也就是登陸成功后,控制臺就會輸出如下信息,查到了實體數(shù)據(jù)說明登陸成功!

三.退出登錄功能
同樣,在Controller中對于退出的請求路徑我們設(shè)置為logout,方法也同名,對于后端人員來說我們要做的就是:
1.清理Session中存儲的id
2.返回一個退出的結(jié)果
@PostMapping("/logout")
public R<String> logout(HttpServletRequest request){
//清理Session中保存的當(dāng)前登錄員工的id
request.getSession().removeAttribute("employee");
return R.success("退出成功");
}
對于這種前后端分離的項目,還有很大一部分需要結(jié)合前端來設(shè)計,但是作為一個對后端感興趣的小伙兒就不聊前端了~
到此這篇關(guān)于SpringBoot實現(xiàn)點餐系統(tǒng)的登錄與退出功能流程詳解的文章就介紹到這了,更多相關(guān)SpringBoot點餐系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring使用WebSocket注入service層失敗問題及解決
這篇文章主要介紹了spring使用WebSocket注入service層失敗問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Retrofit+Rxjava下載文件進度的實現(xiàn)
這篇文章主要介紹了Retrofit+Rxjava下載文件進度的實現(xiàn),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11
在SpringBoot中實現(xiàn)斷點續(xù)傳的實例代碼
在 Spring Boot 或任何其他 web 開發(fā)框架中,斷點續(xù)傳是一種技術(shù),允許文件的傳輸在中斷后可以從中斷點重新開始,而不是從頭開始,種技術(shù)在處理大文件或在不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中尤為重要,本文給大家介紹了SpringBoot中實現(xiàn)斷點續(xù)傳的實例代碼,需要的朋友可以參考下2024-07-07

