Java后端登录功能怎么实现
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,本篇内容介绍了"Java后端登录功能怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. 登录
千家信息网最后更新 2024年11月30日Java后端登录功能怎么实现
本篇内容介绍了"Java后端登录功能怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一. 登录需求分析
页面原型
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 */@Datapublic 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 static 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 */@Datapublic 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 */@Mapperpublic 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 */@Servicepublic class EmployeeServiceImpl extends ServiceImplimplements 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 Rlogin(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;}
"Java后端登录功能怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
登录
员工
数据
密码
状态
用户
结果
成功
业务
用户名
账号
页面
功能
实体
数据库
处理
测试
信息
内容
常量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全防护管理安全
数据库记录导出sql
朔州网络安全知识竞赛获奖名单
服务器安全狗官方网站
安徽企业管理软件开发费用
电脑服务器方面的知识指的什么
软件开发经理个人总结
网络安全标准和产业分论坛
网吧服务器最好配置
中天网络技术有限公司招聘
深圳无线软件开发零售价
cnki数据库的字段代码
违反网络安全案例分析题及答案
游戏服务器名字大全
北京租服务器
网络安全主题实践活动方案
松江区直销软件开发服务
jsp改了数据库名称和表名
华为无线 软件开发
lol服务器ping波动
汕头app软件开发公司
戴尔服务器开机硬盘自检
苹果139邮箱提示服务器错误
服务器关掉后程序员能乱动吗
合肥享充网络技术有限公司app
计算机三级网络技术报名要求
软件开发环境构建步骤
方舟手游服务器账号怎么注册
数据库和vf的区别
花样字体软件开发