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

(0)

相关推荐

  • java外卖订餐系统小项目

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

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

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

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

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

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

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

    目录 一. 登录需求分析 二. 配置返回通用结果类 三. 登录请求API 四. 创建实体类并实现登录逻辑 五. 功能测试 附录 一. 登录需求分析 页面原型 1. 登录页面展示:项目路径(\resources\backend\page\login\login.html) 员工点击登录按钮进行后管平台的登录操作,登录正确以外方式不可登录. 登录处理逻辑 将页面提交的密码进行MD5加密 根据用户名查数据库(查不到返回结果) 比对密码(密码错误返回结果) 查询员工状态,员工状态禁用下不可登录 登录成功

  • Java精品项目瑞吉外卖之员工信息管理篇

    目录 一. 员工信息分页查询 1. 需求分析 2. 代码开发 二. 启用或禁用员工状态 1 需求分析 2 代码开发 前端核心代码 后端核心代码 代码修复 上一篇: 瑞吉外卖项目:新增员工 一. 员工信息分页查询 1. 需求分析 当系统中的用户越来越多页面展示不完整,我们需要通过实现分页的方式去展示员工的信息: 2. 代码开发 在开发代码之前,需要理清楚程序的执行过程与业务逻辑: 页面发送Ajax请求,将分页查询参数(page,pagesize,name)提交到服务端服务端 Controller接

  • Java精品项目瑞吉外卖之登陆的完善与退出功能篇

    目录 一. 需求分析 二.功能实现 三.功能测试 四. 登录功能完善 4.1 问题分析 4.2 实现步骤 4.3 代码实现 上一篇: 后端登录功能实现 一. 需求分析 员工登录之后,页面跳转到后台首页(backend/index.html)此前会显示用户登录的用户名,点击退出按钮退出系统. 请求API: 说明 值 请求地址URL employee/loginout 请求参数 无 返回参数 ({  "code": 1,  "msg": null,  "dat

  • Java精品项目瑞吉外卖之员工新增篇

    目录 一. 需求分析 二. 代码开发 三. 编写全局异常处理 一. 需求分析 后台系统可以管理员工信息,通过新增员工来添加后台系统的用户,点击添加用户转至添加页面: 添加员工的信息需要保存至员工表[employee]中,结构如下: 其中员工状态默认设为1,表示账号在初始创建是可用的状态下的. 二. 代码开发 开发过程 开发之前,梳理一下具体的流程: 页面发送ajax请求,将员工输入的数据转换为JSON格式提交至服务器: 服务端控制层接收请求数据并调用业务层将数据保存: 业务层调用持久层(Mapp

  • 如何利用IDEA搭建SpringBoot项目整合mybatis实现简单的登录功能

    利用闲余时间想自己搭建一个springboot+mybatis的项目,提升一下自己对项目的了解,毕竟自己还是一个小白,在这里为自己创建项目的过程做一个记录,以便以后回忆.同时将搭建中遇到的问题也在这里做记录.如有遇到同样问题的同学,希望能给你一下借鉴. springboot的优势之一就是快速搭建项目,省去了自己导入jar包和配置xml的时间,使用非常方便. 一,搭建项目: 1.打开IDEA,点击File→New→Project...,如图1所示 图1  搭建项目 2.当我们选择project..

  • Django项目中实现使用qq第三方登录功能

    使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name='loginQq/'), path('returns/',qq.returns,name='returns/'), 2,前端页面写qq登录的链接,本文没有用图标,暂时使用a链接请求. <a data-wow-delay=".5s" href="/blog/loginQq/&q

  • Java 实战项目之精品养老院管理系统的实现流程

    一.项目简述 本系统功能包括:通知公告,老人管理,护工管理,问答管理等等功能. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持). 项目技术: Springboot + Maven + mybatis+ Vue 等等组成,B/S模式 + Maven管理等等. 系统控制器(登录.注销.修改.新增登)业务: /** * 系统控

  • 以Java Web项目为例浅谈前后端分离开发模式

    目录 为什么要前后端分离? 什么是前后端分离? 前后端分离的优缺点? 对于你们的团队和产品有没有必要前后端分离? 为什么要前后端分离? 以Java Web项目为例,在传统的开发模式中,前端代码(Html.js.css)写在JSP中,甚至JSP中嵌入Java代码.当用户访问网站时,页面数据也就是Html文档,由Servlet容器将jsp编译成Servlet,然后将jsp中的html,css,js代码输出到浏览器,这个过程需要经过很多步骤,才能响应用户的请求.这个过程非常繁琐,效率低下,直接造成了页

  • Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下

    目录 前言 查询 查询写法1 查询写法2 代码说明 新问题 删 总结 前言 接着上一篇:Java Fluent Mybatis 项目工程化与常规操作详解流程篇 上 仓库地址:GitHub仓库 查询 定义查询请求体 package com.hy.fmp.dto.req; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** @

随机推荐