Java精品項(xiàng)目瑞吉外賣之后端登錄功能篇
一. 登錄需求分析
頁面原型

1. 登錄頁面展示:項(xiàng)目路徑(\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;
/** 信息返回?cái)?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" } |
| 返回?cái)?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):
- 用戶名與密碼的校驗(yà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精品項(xiàng)目瑞吉外賣之后端登錄功能篇的文章就介紹到這了,更多相關(guān)Java外賣后端登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)詳細(xì)教程
使用SSM(Spring、SpringMVC和Mybatis)已經(jīng)有段時間了,項(xiàng)目在技術(shù)上已經(jīng)沒有什么難點(diǎn)了,基于現(xiàn)有的技術(shù)就可以實(shí)現(xiàn)想要的功能,下面這篇文章主要給大家介紹了關(guān)于整合SSM框架:Spring MVC + Spring + MyBatis的相關(guān)資料,需要的朋友可以參考下。2017-07-07
Spring Boot的filter(過濾器)簡單使用實(shí)例詳解
過濾器(Filter)的注冊方法和 Servlet 一樣,有兩種方式:代碼注冊或者注解注冊,下面通過實(shí)例給大家介紹Spring Boot的filter(過濾器)簡單使用,一起看看吧2017-04-04

