服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java精品项目瑞吉外卖之后端登录功能篇

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

2022-12-13 16:45爪哇斗罗 Java教程

这篇文章主要为大家详细介绍了java精品项目-瑞吉外卖订餐系统,此项目过大,分为多章独立讲解,本篇内容为后端登录功能的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一. 登录需求分析

页面原型

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

1. 登录页面展示:项目路径(\resources\backend\page\login\login.html)

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

员工点击登录按钮进行后管平台的登录操作,登录正确以外方式不可登录。

登录处理逻辑

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

  • 将页面提交的密码进行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外卖后端登录内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://tongbing.blog.csdn.net/article/details/124334559

延伸 · 阅读

精彩推荐
  • Java教程使用kotlin集成springboot开发的超详细教程

    使用kotlin集成springboot开发的超详细教程

    目前大多数都在使用java集成 springboot进行开发,本文演示仅仅将 java换成 kotlin,其他不变的情况下进行开发,需要的朋友可以参考下...

    安静的夜灬7512021-12-16
  • Java教程Java关键字this与super详解用法

    Java关键字this与super详解用法

    这篇文章主要介绍了Java关键字this与super的用法,this与super是类实例化时通往Object类通道的打通者;this和super在程序中由于其经常被隐式的使用而被我们忽略...

    小老师ir4202022-11-13
  • Java教程Spring Boot集成Java DSL的实现代码

    Spring Boot集成Java DSL的实现代码

    这篇文章主要介绍了Spring Boot集成Java DSL的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    jdon.9082021-06-30
  • Java教程java中string.trim()函数的作用实例及源码

    java中string.trim()函数的作用实例及源码

    这篇文章主要介绍了java中string.trim()函数的作用实例及源码,具有一定借鉴价值,需要的朋友可以参考下...

    陈建忠11312021-03-16
  • Java教程原来Java接口多实现还可以这样玩

    原来Java接口多实现还可以这样玩

    JAVA中类不直接支持多继承,因为会出现调用的不确定性,所以JAVA将多继承机制进行改良,在JAVA中变成了多实现,这篇文章主要给大家介绍了关于Java接口多实现...

    热黄油啤酒12222021-12-21
  • Java教程Java HashMap的工作原理

    Java HashMap的工作原理

    这篇文章主要介绍了Java HashMap的工作原理的相关资料,需要的朋友可以参考下 ...

    mrr1482020-04-08
  • Java教程Java实现颜色渐变效果

    Java实现颜色渐变效果

    这篇文章主要为大家详细介绍了Java实现颜色渐变效果的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    落枫飘飘6812021-06-19
  • Java教程IDEA标签tabs多行显示的设置

    IDEA标签tabs多行显示的设置

    这篇文章主要介绍了IDEA标签tabs多行显示的设置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    增伟8312021-08-05