Java精品項目瑞吉外賣之后端登錄功能篇
一. 登錄需求分析
頁面原型
1. 登錄頁面展示:項目路徑(\resources\backend\page\login\login.html)
員工點(diǎn)擊登錄按鈕進(jìn)行后管平臺的登錄操作,登錄正確以外方式不可登錄。
登錄處理邏輯
- 將頁面提交的密碼進(jìn)行MD5加密
- 根據(jù)用戶名查數(shù)據(jù)庫(查不到返回結(jié)果)
- 比對密碼(密碼錯誤返回結(jié)果)
- 查詢員工狀態(tài),員工狀態(tài)禁用下不可登錄
- 登錄成功,寫入session中,返回結(jié)果。
二. 配置返回通用結(jié)果類
package com.itheima.reggie.common; import lombok.Data; import java.util.HashMap; import java.util.Map; /** * 返回通用類 * @author jekong * @date 2022/4/22 */ @Data public class R<T> { /** 編碼:1成功,0和其它數(shù)字為失敗*/ private Integer code; /** 信息返回*/ private String msg; /** 信息返回數(shù)據(jù)*/ private T data; /** 動態(tài)數(shù)據(jù)*/ private Map map = new HashMap(); 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; } }
三. 登錄請求API
說明 | 值 |
請求URL | /employee/login |
請求數(shù)據(jù) | { "username": "admin", "password": "123456" } |
返回數(shù)據(jù) | { "code": 0, "msg": "登錄成功", "data": null, "map": {} } |
四. 創(chuàng)建實(shí)體類并實(shí)現(xiàn)登錄邏輯
entity: 創(chuàng)建實(shí)體類
創(chuàng)建Employee.java(員工對象)
package com.itheima.reggie.entity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; /** * 員工實(shí)體類 * @author jektong * @date 2022/4/21 */ @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; /**狀態(tài)*/ private Integer status; /**創(chuàng)建時間*/ private LocalDateTime createTime; /**更新時間*/ private LocalDateTime updateTime; /**添加用戶時使用*/ @TableField(fill = FieldFill.INSERT) private Long createUser; /**更新用戶時使用*/ @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser; }
mapper數(shù)據(jù)庫交互層
package com.itheima.reggie.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.itheima.reggie.entity.Employee; import org.apache.ibatis.annotations.Mapper; /** * EmployeeMapper * @author jektong * @date 2022/4/21 */ @Mapper public interface EmployeeMapper extends BaseMapper<Employee> { }
service業(yè)務(wù)層接口
package com.itheima.reggie.service; import com.baomidou.mybatisplus.extension.service.IService; import com.itheima.reggie.entity.Employee; import org.springframework.stereotype.Service; /** * @author jektong * @date 2022/4/21 */ public interface EmployeeService extends IService<Employee> { }
業(yè)務(wù)層實(shí)現(xiàn)類
package com.itheima.reggie.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.itheima.reggie.entity.Employee; import com.itheima.reggie.mapper.EmployeeMapper; import com.itheima.reggie.service.EmployeeService; import org.springframework.stereotype.Service; /** * @author jektong * @date 2022/4/21 */ @Service public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService { }
controller控制層
package com.itheima.reggie.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.itheima.reggie.common.CommonsConst; import com.itheima.reggie.common.R; import com.itheima.reggie.entity.Employee; import com.itheima.reggie.service.EmployeeService; import lombok.extern.slf4j.Slf4j; import org.springframework.util.DigestUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; /** * 員工控制類 * * @author tongbing * @date 2022/4/21 */ @Slf4j @RestController @RequestMapping("/employee") public class EmployeeController { @Resource private EmployeeService employeeService = null; /** * 登錄請求處理 * TODO 后續(xù)改進(jìn)將業(yè)務(wù)處理的代碼放入業(yè)務(wù)層,這里只做數(shù)據(jù)請求與返回 * @param request * @param employee * @return */ @PostMapping("/login") public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee) { // 將頁面提交的密碼進(jìn)行MD5加密 String password = employee.getPassword(); password = DigestUtils.md5DigestAsHex(password.getBytes()); // 根據(jù)用戶名查數(shù)據(jù)庫 LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<Employee>(); queryWrapper.eq(Employee::getUsername, employee.getUsername()); Employee emp = employeeService.getOne(queryWrapper); // 查不到返回登錄失敗結(jié)果 if(emp == null){ return R.error(CommonsConst.LOGIN_FAIL); } // 比對密碼 if(!emp.getPassword().equals(password)){ return R.error(CommonsConst.LOGIN_FAIL); } // 查看員工狀態(tài) if(emp.getStatus() == CommonsConst.EMPLOYEE_STATUS_NO){ return R.error(CommonsConst.LOGIN_ACCOUNT_STOP); } // 登錄成功將員工的ID放入session中 request.getSession().setAttribute("employeeId",emp.getId()); return R.success(emp); } }
五. 功能測試
Debug測試時主要測試以下幾點(diǎn):
- 用戶名與密碼的校驗
- 用戶狀態(tài)禁用情況下
- 數(shù)據(jù)是否正確返回
附錄
常量類:
package com.itheima.reggie.common; /** * 常量定義 * @author jektong * @date 2022/4/23 */ public class CommonsConst { // 登錄失敗 public static final String LOGIN_FAIL = "登錄失敗"; // 賬號禁用 public static final String LOGIN_ACCOUNT_STOP = "賬號禁止使用"; // 員工賬號禁用狀態(tài) 0:禁用 public static final Integer EMPLOYEE_STATUS_NO = 0; // 員工賬號正常狀態(tài) 1:正常使用 public static final Integer EMPLOYEE_STATUS_YES = 1; }
到此這篇關(guān)于Java精品項目瑞吉外賣之后端登錄功能篇的文章就介紹到這了,更多相關(guān)Java外賣后端登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)詳細(xì)教程
使用SSM(Spring、SpringMVC和Mybatis)已經(jīng)有段時間了,項目在技術(shù)上已經(jīng)沒有什么難點(diǎn)了,基于現(xiàn)有的技術(shù)就可以實(shí)現(xiàn)想要的功能,下面這篇文章主要給大家介紹了關(guān)于整合SSM框架:Spring MVC + Spring + MyBatis的相關(guān)資料,需要的朋友可以參考下。2017-07-07Spring Boot的filter(過濾器)簡單使用實(shí)例詳解
過濾器(Filter)的注冊方法和 Servlet 一樣,有兩種方式:代碼注冊或者注解注冊,下面通過實(shí)例給大家介紹Spring Boot的filter(過濾器)簡單使用,一起看看吧2017-04-04