Java精品项目瑞吉外卖之后端登录功能篇

网友投稿 247 2022-07-30


目录一. 登录需求分析二. 配置返回通用结果类三. 登录请求API四. 创建实体类并实现登录逻辑五. 功能测试附录

一. 登录需求分析

页面原型

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 {

/** 编码:1成功,0和其它数字为失败*/

private Integer code;

/** 信息返回*/

private String msg;

/** 信息返回数据*/

private T data;

/** 动态数据*/

private Map map = new HashMap();

public static R success(T object) {

R r = new R();

r.data = object;

r.code = 1;

return r;

}

public statiVEWNWRHc R error(String msg) {

R r = new R();

r.msg = msg;

r.code = 0;

return r;

}

public R 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 {

}

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 {

}

业务层实现类

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 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 EmployeeConthttp://roller {

@Resource

private EmployeeService employeeService = null;

/**

* 登录请求处理

* TODO 后续改进将业务处理的代码放入业务层,这里只做数据请求与返回

* @param request

* @param employee

* @return

*/

@PostMapping("/login")

public R login(HttpServletRequest request,

@RequestBody Employee employee) {

// 将页面提交的密码进行MD5加密

String password = employee.getPassword();

password = DigestUtils.md5DigestAsHex(password.getBytes());

// 根据用户名查数据库

LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();

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;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java元素排序Comparable与Comparator的区别
下一篇:java 中如何实现 List 集合去重
相关文章

 发表评论

暂时没有评论,来抢沙发吧~