欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一.登錄功能前置

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

基于人員登錄功能,OOP的模式告訴我們要?jiǎng)?chuàng)建員工對(duì)應(yīng)的實(shí)體類(lèi)(Lombok自動(dòng)生成getter,setter)就像這樣:

@Data
public class Employee implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    private String username; //用戶(hù)名
    private String name;
    private String password;
    private String phone;
    private String sex;
    private String idNumber;//身份證號(hào)碼
    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è)計(jì):

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

二.登錄流程設(shè)計(jì)

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

@Data
public class R<T> {
    private Integer code; //編碼:1成功,0和其它數(shù)字為失敗
    private String msg; //錯(cuò)誤信息
    private T data; //數(shù)據(jù)
    private Map map = new HashMap(); //動(dòng)態(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;
    }
}

對(duì)于登錄的請(qǐng)求路徑,我們?cè)O(shè)置為“login”,登陸方法也同名

當(dāng)我們輸入了密碼點(diǎn)擊了登錄也就對(duì)應(yīng)一次請(qǐng)求的發(fā)生,其次就是Controller層對(duì)于登錄流程的開(kāi)發(fā)

1、將頁(yè)面提交的密碼password進(jìn)行md5加密處理

2、根據(jù)頁(yè)面提交的用戶(hù)名username查詢(xún)數(shù)據(jù)庫(kù)

3、如果沒(méi)有查詢(xún)到則返回登錄失敗結(jié)果

4、密碼比對(duì),如果不一致則返回登錄失敗結(jié)果

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

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

首先,對(duì)于加密操作:

我們通過(guò)boot注入Service層的實(shí)體類(lèi)后,就可以從每一次的請(qǐng)求成功中而獲得的對(duì)象里拿到密碼,然后進(jìn)行加密操作

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

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

因?yàn)樵诮ū碇?,?duì)于username設(shè)置了unique索引,進(jìn)行了唯一約束,所以可以直接getOne,得到employee對(duì)象

其次,針對(duì)查詢(xún)完成后的結(jié)果emp,又有了以下幾種判定

① 如果數(shù)據(jù)庫(kù)中沒(méi)有查詢(xún)到則返回登錄失敗

        if (emp == null) {
            return R.error("登陸失敗啦~");
        }

②如果在查詢(xún)成功后密碼比對(duì)不一致則返回登陸失敗

if (!(emp.getPassword().equals(passWord))) {
            return R.error("登陸成功啦~");
        }

③如果員工狀態(tài)不正確,則返回登陸失敗

        if (emp.getStatus() == 0) {
            return R.error("您的賬號(hào)已被禁用,請(qǐng)稍后重試!");
        }

④如果上述三個(gè)if都不滿(mǎn)足,則登陸成功就將員工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;
    /**
     * 登陸開(kāi)發(fā)
     */
    @PostMapping("/login")
    public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee) {
        // 頁(yè)面提交的密碼進(jìn)行MD5加密
        String passWord = employee.getPassword();
        passWord = DigestUtils.md5DigestAsHex(passWord.getBytes());
        //根據(jù)頁(yè)面提交的用戶(hù)名來(lái)查詢(xún)數(shù)據(jù)庫(kù)
        LambdaQueryWrapper<Employee> lqw = new LambdaQueryWrapper<>();
        lqw.eq(Employee::getUsername, employee.getUsername());
        Employee emp = employeeService.getOne(lqw);
        //如果數(shù)據(jù)庫(kù)中沒(méi)有查詢(xún)到則返回登錄失敗
        if (emp == null) {
            return R.error("登陸失敗啦~");
        }
        //在查詢(xún)成功后進(jìn)行密碼比對(duì)
        if (!(emp.getPassword().equals(passWord))) {
            return R.error("登陸失敗啦~");
        }
        //查看員工狀態(tài)
        if (emp.getStatus() == 0) {
            return R.error("您的賬號(hào)已被禁用,請(qǐng)稍后重試!");
        }
        //登陸成功就將員工id存入Session并返回登陸成功結(jié)果
        request.getSession().setAttribute("employee", emp.getId());
        return R.success(emp); //登陸成功并返回對(duì)象
    }
}

從后端的角度,當(dāng)我完成查詢(xún)操作也就是登陸成功后,控制臺(tái)就會(huì)輸出如下信息,查到了實(shí)體數(shù)據(jù)說(shuō)明登陸成功!

三.退出登錄功能

同樣,在Controller中對(duì)于退出的請(qǐng)求路徑我們?cè)O(shè)置為logout,方法也同名,對(duì)于后端人員來(lái)說(shuō)我們要做的就是:

1.清理Session中存儲(chǔ)的id

2.返回一個(gè)退出的結(jié)果

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

對(duì)于這種前后端分離的項(xiàng)目,還有很大一部分需要結(jié)合前端來(lái)設(shè)計(jì),但是作為一個(gè)對(duì)后端感興趣的小伙兒就不聊前端了~

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

相關(guān)文章

  • Java 字符串壓縮與解壓的開(kāi)發(fā)記錄

    Java 字符串壓縮與解壓的開(kāi)發(fā)記錄

    這篇文章主要介紹了Java 字符串壓縮與解壓的開(kāi)發(fā)記錄,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • spring使用WebSocket注入service層失敗問(wèn)題及解決

    spring使用WebSocket注入service層失敗問(wèn)題及解決

    這篇文章主要介紹了spring使用WebSocket注入service層失敗問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中如何判斷中文字符串長(zhǎng)度

    Java中如何判斷中文字符串長(zhǎng)度

    這篇文章主要介紹了Java中如何判斷中文字符串長(zhǎng)度問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • ?java中Thread.sleep()的具體使用

    ?java中Thread.sleep()的具體使用

    本文主要介紹了?java中Thread.sleep()的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • @RequestBody的使用案例代碼

    @RequestBody的使用案例代碼

    @RequestBody主要用來(lái)接收前端傳遞給后端的json字符串中的數(shù)據(jù)的,這篇文章主要介紹了@RequestBody的使用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)

    Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)

    這篇文章主要介紹了Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • Java解析json報(bào)文實(shí)例解析

    Java解析json報(bào)文實(shí)例解析

    這篇文章主要介紹了Java解析json報(bào)文實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 在SpringBoot中實(shí)現(xiàn)斷點(diǎn)續(xù)傳的實(shí)例代碼

    在SpringBoot中實(shí)現(xiàn)斷點(diǎn)續(xù)傳的實(shí)例代碼

    在 Spring Boot 或任何其他 web 開(kāi)發(fā)框架中,斷點(diǎn)續(xù)傳是一種技術(shù),允許文件的傳輸在中斷后可以從中斷點(diǎn)重新開(kāi)始,而不是從頭開(kāi)始,種技術(shù)在處理大文件或在不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中尤為重要,本文給大家介紹了SpringBoot中實(shí)現(xiàn)斷點(diǎn)續(xù)傳的實(shí)例代碼,需要的朋友可以參考下
    2024-07-07
  • Java線(xiàn)程的6種狀態(tài)及切換教程

    Java線(xiàn)程的6種狀態(tài)及切換教程

    這篇文章主要給大家介紹了關(guān)于Java線(xiàn)程的6種狀態(tài)及切換教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳解Mybatis Generator的具體使用教程

    詳解Mybatis Generator的具體使用教程

    Mybatis Generator可以幫助我們自動(dòng)生成很多結(jié)構(gòu)化的代碼,比如每張表對(duì)應(yīng)的Entity、Mapper接口和Xml文件,可以省去很多繁瑣的工作,今天通過(guò)本文給大家介紹Mybatis Generator的具體使用教程,感興趣的朋友一起看看吧
    2022-02-02

最新評(píng)論