最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實現(xiàn)點餐系統(tǒng)的登錄與退出功能流程詳解

 更新時間:2022年10月12日 14:30:32   作者:懶羊羊.java  
結束了Springboot+MyBatisPlus也是開始了項目之旅,將從后端的角度出發(fā)來整理這個項目中重點業(yè)務功能的梳理與實現(xiàn)

一.登錄功能前置

首先,我們需要在數(shù)據(jù)庫中建立對應的表…

基于人員登錄功能,OOP的模式告訴我們要創(chuà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ù)層設計:

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

二.登錄流程設計

首先進行的應該是前后端協(xié)議聯(lián)調,需要把返回給前端的數(shù)據(jù)封裝成一個實體R,R中定義各種狀態(tài)碼,登陸成功則調用成功方法返回數(shù)據(jù)對象,失敗則調用失敗方法返回一則自定義消息

@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;
    }
}

對于登錄的請求路徑,我們設置為“login”,登陸方法也同名

當我們輸入了密碼點擊了登錄也就對應一次請求的發(fā)生,其次就是Controller層對于登錄流程的開發(fā)

1、將頁面提交的密碼password進行md5加密處理

2、根據(jù)頁面提交的用戶名username查詢數(shù)據(jù)庫

3、如果沒有查詢到則返回登錄失敗結果

4、密碼比對,如果不一致則返回登錄失敗結果

5、查看員工狀態(tài),如果為已禁用狀態(tài),則返回員工已禁用結果

6、登錄成功,將員工id存入Session并返回登錄成功結果

首先,對于加密操作:

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

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

注:這里為什么可以直接getOne()?大家想過嗎

因為在建表之初,對于username設置了unique索引,進行了唯一約束,所以可以直接getOne,得到employee對象

其次,針對查詢完成后的結果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并返回登陸成功結果

    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest request){
        //清理Session中保存的當前登錄員工的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并返回登陸成功結果
        request.getSession().setAttribute("employee", emp.getId());
        return R.success(emp); //登陸成功并返回對象
    }
}

從后端的角度,當我完成查詢操作也就是登陸成功后,控制臺就會輸出如下信息,查到了實體數(shù)據(jù)說明登陸成功!

三.退出登錄功能

同樣,在Controller中對于退出的請求路徑我們設置為logout,方法也同名,對于后端人員來說我們要做的就是:

1.清理Session中存儲的id

2.返回一個退出的結果

    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest request){
        //清理Session中保存的當前登錄員工的id
        request.getSession().removeAttribute("employee");
        return R.success("退出成功");
    }

對于這種前后端分離的項目,還有很大一部分需要結合前端來設計,但是作為一個對后端感興趣的小伙兒就不聊前端了~

到此這篇關于SpringBoot實現(xiàn)點餐系統(tǒng)的登錄與退出功能流程詳解的文章就介紹到這了,更多相關SpringBoot點餐系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Intellij IDEA解析jacoco結果文件的方法

    Intellij IDEA解析jacoco結果文件的方法

    這篇文章主要介紹了Intellij IDEA解析jacoco結果文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 利用Java實現(xiàn)紅黑樹

    利用Java實現(xiàn)紅黑樹

    紅黑樹是眾多“平衡的”搜索樹模式中的一種,在最壞情況下,它相關操作的時間復雜度為O(log n),接下倆小編將子啊下文詳細介紹Java是如何實現(xiàn)紅黑樹的
    2021-09-09
  • POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析

    POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析

    這篇文章主要介紹了POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java NIO工作原理的全面分析

    Java NIO工作原理的全面分析

    JDK 1.4 中引入的新輸入輸出 (NIO) 庫在標準 Java 代碼中提供了高速的、面向塊的 I/O。本實用教程從高級概念到底層的編程細節(jié),非常詳細地介紹了 NIO 庫。您將學到諸如緩沖區(qū)和通道這樣的關鍵 I/O 元素的知識,并考察更新后的庫中的標準 I/O 是如何工作的。您還將了解只能通過 NIO 來完成的工作,如異步 I/O 和直接緩沖區(qū)。
    2013-02-02
  • Java實現(xiàn)OTP(動態(tài)口令)服務

    Java實現(xiàn)OTP(動態(tài)口令)服務

    OTP是一種動態(tài)生成的短時有效密碼,用于身份驗證,通常在登錄或執(zhí)行敏感操作時提供額外的安全保障,本文主要介紹了Java實現(xiàn)OTP(動態(tài)口令)服務,感興趣的可以了解一下
    2025-03-03
  • spring使用WebSocket注入service層失敗問題及解決

    spring使用WebSocket注入service層失敗問題及解決

    這篇文章主要介紹了spring使用WebSocket注入service層失敗問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java如何做帶復選框的菜單實例代碼

    Java如何做帶復選框的菜單實例代碼

    大家好,本篇文章主要講的是Java如何做帶復選框的菜單實例代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Java模擬實現(xiàn)HashMap算法流程詳解

    Java模擬實現(xiàn)HashMap算法流程詳解

    在java開發(fā)中,HashMap是最常用、最常見的集合容器類之一,文中通過示例代碼介紹HashMap為啥要二次Hash,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • 淺談Java中的Filter過濾器

    淺談Java中的Filter過濾器

    本篇文章主要介紹了淺談Java中的Filter過濾器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java中對象的序列化詳解及實例

    Java中對象的序列化詳解及實例

    這篇文章主要介紹了 Java中對象的序列化詳解及實例的相關資料,需要的朋友可以參考下
    2017-04-04

最新評論

浪卡子县| 神农架林区| 历史| 左云县| 绵竹市| 新巴尔虎左旗| 巴林右旗| 海兴县| 舞钢市| 长垣县| 界首市| 张家口市| 濮阳市| 迭部县| 温泉县| 宁蒗| 日土县| 开平市| 竹北市| 巫山县| 禄劝| 千阳县| 新密市| 墨竹工卡县| 高清| 新泰市| 斗六市| 琼中| 太谷县| 南溪县| 永川市| 永善县| 瓦房店市| 黎城县| 东城区| 巨鹿县| 清流县| 晋中市| 温泉县| 井研县| 天等县|