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

目录
  • 一. 登录需求分析
  • 二. 配置返回通用结果类
  • 三. 登录请求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<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测试时主要测试以下几点:

  1. 用户名与密码的校验
  2. 用户状态禁用情况下
  3. 数据是否正确返回

附录

常量类:

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外卖后端登录内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2022-05-13

java实现外卖订餐系统

本文实例为大家分享了java实现外卖订餐系统的具体代码,供大家参考,具体内容如下 一.使用技术 javaSE 二.实现功能 外卖订餐系统 具体要求如下: 使用选择结构,循环结构,数组的知识实现一个外卖订餐系统 三.运行效果图 1.订餐功能 2.查看餐袋 3.签收订单 4.删除订单 5.点赞 6.退出 分析图片信息,可以看出我们需要创建一个菜单类,查看餐带类和点赞菜单类 1.首先我们创建一个菜单类,用来定义菜单的属性,使用到封装,构造方法,和toString方法. public class Foo

Java实战之校园外卖点餐系统的实现

目录 一.项目简述 二.效果图展示 三.核心代码 管理员controller控制层 管理员角色controler控制层 后台登录控制层 订单模块controller控制层 一.项目简述 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + css + JavaScript + JQuery + Ajax

Java精品项目瑞吉外卖之新增菜品与分页查询篇

目录 一. 新增菜品 1.1需求分析 1.2代码开发 API 代码 二. 分类信息分页查询 三. 删除分类 3.1 需求分析 3.2 核心代码 四. 修改分类 一. 新增菜品 1.1需求分析 后台系统可以管理分类信息,分类菜品分类和套餐分类.当我们在后台系统添加菜品时需要选择一个菜品分类. 当我们在后台系统中添加一个套餐时需要选择一个套餐分类,在移动端也会按照菜品分类和套餐分类来展示对应的菜品和套餐. 同时,在后台系统的分类管理页面分别添加菜品分类与套餐分类: 添加菜品分类 添加套餐分类 数据模

java外卖订餐系统小项目

本文实例为大家分享了java外卖订餐系统的具体代码,供大家参考,具体内容如下 执行结果: 通过选择功能序号,执行响应的功能: 代码实现: package 外卖订餐系统; /* * 代码优点,使用 循环: * 显示菜单, * 根据用户选择的数字执行相应功能(功能实现:do..while循环.) */ import java.util.Scanner; public class OrderingMsg { public static void main(String[] args) { //数据主题

java实现简易外卖订餐系统

用java实现简易外卖订餐系统,供大家参考,具体内容如下 一.使用技术 javaSE 二.实现功能 外卖订餐系统 具体要求如下: 使用选择结构,循环结构,数组的知识实现一个外卖订餐系统 三.运行效果图 1.订餐功能 2.查看餐袋 3.签收订单 4.删除订单 5.点赞 6.退出 代码实现 public class Order { public static void main(String[] args) { int zero = 1; int x = 0;//订单数组下标 String[] na

Java吃货联盟订餐系统代码实例

本文实例为大家分享了Java订餐系统的具体代码,供大家参考,具体内容如下 package cn.practice1200; import java.util.Scanner; public class Eater_Alliance { /** * 吃货联盟订餐系统 * * @author QCD * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner

Java实现简单订餐系统

本文实例为大家分享了Java实现简单订餐系统的具体代码,供大家参考,具体内容如下 import java.util.Scanner; import java.util.*; public class OrderingMsg { public static void main(String[] args) { // 数据主体:一组订单信息 String[] names = new String[4]; // 订餐人名称 String[] dishMegs = new String[4]; // 所

java实现订餐系统

本文实例为大家分享了java实现订餐系统的具体代码,供大家参考,具体内容如下 import java.util.Scanner; public class versionAlliance { public static void main(String[] args) { Scanner in = new Scanner(System.in); String[] names=new String[5];//客户姓名 String[] dishes= {"红烧带鱼","鱼香肉丝

java创建简易视频播放器

最近有个多媒体的作业,要求使用visualC++和OpenCV编写一个简易的视频播放器,对于C/C++残疾者而言是不可能的,于是萌生了用Java编写的想法.具体经验分享一下. 目标:制作简易视频播放器 开发工具:eclipse4.5.1:VLC2.2.1 具体内容:完成了视频的加载.播放.退出的功能:实现了视频播放过程中控制播放进程:实现播放过程中控制暂停. 最终程序效果图如下: 开发过程参考学习资源: 极客学院视屏教程 Java framework for the vlc media play

Java实现简易HashMap功能详解

本文实例讲述了Java实现简易HashMap功能.分享给大家供大家参考,具体如下: 创建节点类 节点类含有的属性:键值对(value,key)以及指向下一节点的next: 这些属性的get以及set方法 代码如下: /** * 节点类 * @author HP * */ public class Node { private Object value; private Object key; private Node next; /** * 空节点 */ public Node() { } /*

Java实现餐厅点餐系统的实例代码

学习Java实现餐厅点餐系统,本文实现该系统的功能截图,和数据库设计SQL语句,系统功能图,功能优势等供大家参考 1.点餐管理系统背景 随着科技的发展,去饭店吃饭点餐和结账都是以线上操作的形势完成. a.和现在有的系统比较起来,本系统有餐桌管理,菜系管理,菜名管理,订单管理,订单详情等功能. b.和现有系统比较起来,本系统是B/S结构,一般点餐系统为C/S结构,性能方面不如B/S结构,并且C/S接口需要安装客户端,客户端压力很大,我的系统只需要电脑或者手机具有浏览器,在同一局域网就可以进行订餐.

Java 实现简易教务管理系统的代码

Main.java import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.println("\t\t简易教务管理系统"); System.out.println("1.录入学生\t2.显示学生\t3.录入课程\t4.显示课程\t5.录入教师" +"\t6.显示教师\t7.学生选课\t8.教师录入成绩\t9.教师排课\

Java 模拟银行自助终端系统

一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处理机制进行处理. 2. 评分将以功能实现与代码规范性相结合的方式进行考核. 3. 如果对项目需求有疑问,可以随时以QQ留言方式联系我进行咨询. 4. 国庆放假期间,每天都有老师在公司值班,10月4日是我在公司值班,10月7日正常上班,欢迎大家到公司来做项目. 二. 项目功能要求: 项目开始运行显示主菜单为: 银行自助终端系统 ************

Java实现排球比赛计分系统

初步计划: 或许由于个人原因,排球计分系统在假期就完成了,一直未写博客,就这样一直在推就是不想写,在加上过完年就工作了,可能刚实习工作比较紧所以一直等到现在. 写这个系统之前我简单构思了一下,因为离校前我去洛阳参加了一个多月的Java培训,所以写项目用的ide是Java环境.刚开始考虑用jsp做界面,架构用mvc,但是后来一想工作量太大而且效果也不是很好.最终写了纯Java代码,在虚拟机上展示. 需求分析: 排球竞赛为五局三胜制,每局比赛中得够25分并且领先对方2分以上的一方将获得一局胜利,先获