Java精品項目瑞吉外賣之後端登錄功能篇
一. 登錄需求分析
頁面原型
1. 登錄頁面展示:項目路徑(\resources\backend\page\login\login.html)
員工點擊登錄按鈕進行後管平臺的登錄操作,登錄正確以外方式不可登錄。
登錄處理邏輯
- 將頁面提交的密碼進行MD5加密
- 根據用戶名查數據庫(查不到返回結果)
- 比對密碼(密碼錯誤返回結果)
- 查詢員工狀態,員工狀態禁用下不可登錄
- 登錄成功,寫入session中,返回結果。
二. 配置返回通用結果類
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和其它數字為失敗*/ private Integer code; /** 信息返回*/ private String msg; /** 信息返回數據*/ private T data; /** 動態數據*/ 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 |
請求數據 | { "username": "admin", "password": "123456" } |
返回數據 | { "code": 0, "msg": "登錄成功", "data": null, "map": {} } |
四. 創建實體類並實現登錄邏輯
entity: 創建實體類
創建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; /** * 員工實體類 * @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; /**狀態*/ private Integer status; /**創建時間*/ private LocalDateTime createTime; /**更新時間*/ private LocalDateTime updateTime; /**添加用戶時使用*/ @TableField(fill = FieldFill.INSERT) private Long createUser; /**更新用戶時使用*/ @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser; }
mapper數據庫交互層
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業務層接口
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> { }
業務層實現類
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 後續改進將業務處理的代碼放入業務層,這裡隻做數據請求與返回 * @param request * @param employee * @return */ @PostMapping("/login") public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee) { // 將頁面提交的密碼進行MD5加密 String password = employee.getPassword(); password = DigestUtils.md5DigestAsHex(password.getBytes()); // 根據用戶名查數據庫 LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<Employee>(); queryWrapper.eq(Employee::getUsername, employee.getUsername()); Employee emp = employeeService.getOne(queryWrapper); // 查不到返回登錄失敗結果 if(emp == null){ return R.error(CommonsConst.LOGIN_FAIL); } // 比對密碼 if(!emp.getPassword().equals(password)){ return R.error(CommonsConst.LOGIN_FAIL); } // 查看員工狀態 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測試時主要測試以下幾點:
- 用戶名與密碼的校驗
- 用戶狀態禁用情況下
- 數據是否正確返回
附錄
常量類:
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 = "賬號禁止使用"; // 員工賬號禁用狀態 0:禁用 public static final Integer EMPLOYEE_STATUS_NO = 0; // 員工賬號正常狀態 1:正常使用 public static final Integer EMPLOYEE_STATUS_YES = 1; }
到此這篇關於Java精品項目瑞吉外賣之後端登錄功能篇的文章就介紹到這瞭,更多相關Java外賣後端登錄內容請搜索LevelAH以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持LevelAH!
推薦閱讀:
- Java精品項目瑞吉外賣之新增菜品與分頁查詢篇
- Java精品項目瑞吉外賣之登陸的完善與退出功能篇
- SpringBoot2 實現JPA分頁和排序分頁的案例
- SpringBoot模擬員工數據庫並實現增刪改查操作
- SpringBoot中Dozer的使用小結