软件开发整体介绍
软件开发流程
角色分工
软件环境
瑞吉外卖项目介绍
项目介绍
产品原型介绍
技术选型
功能架构
角色
开发环境搭建
数据
创建database reggie,在里面创建表:
maven
创建springboot项目并导入相关依赖坐标:
我们可以在项目启动类上添加注解@Slf4j, 该注解由lombok提供。添加后我们可以使用属性log在控制输出日志:
我们将前端页面的资源导入到static目录,之后随便访问一个html页面:
访问成功。
后台系统登录功能
需求分析
打开前端的登录界面,点击登录
再去查看前端代码,确定返回数据的类型大概:
代码开发
我们将大致的框架创建好:
Employee类与employee表中的字段对应。dao,service分别继承BaseMapper和IService,使用mybatisplus来帮助构建。
我们再定义数据的统一返回类型,使用类R来定义:
为了通用性,还给R设置了泛型<T>,返回的数据类型即可以根据需求来改变
private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息,成功无此信息private T data; //数据private Map map = new HashMap(); //动态数据
里面有两个静态方法,分别是数据获取成功和失败对应的方法:
我们再在controller类中创建员工登录的方法:
编写代码:
@PutMapping("/login")public R<Employee> login(HttpServletRequest httpServletRequest, @RequestBody Employee employee) {//1.对传进的密码进行md5加密String password = employee.getPassword();password = DigestUtils.md5DigestAsHex(password.getBytes());//2.根据页面提交的用户名username查询数据库;LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Employee::getUsername, employee.getUsername());Employee emp =employeeService.getOne(queryWrapper); //username在数据库为unique//3.查询数据库中是否存在该用户名if(null==emp){return R.error("该用户未注册");}//4.密码比对else if(!emp.getPassword().equals(password)){return R.error("密码错误");}//5.查看员工状态,如果未已警用状态,则返回禁用结果else if(emp.getStatus()!=1){return R.error("该账号已被封禁");}//6.登录成功,将员工id存入Session并返回登陆成功结果else {httpServletRequest.getSession().setAttribute("employee",emp.getId());return R.success(emp);}}
功能测试
当输入不存在的用户名:
输入错误密码:
用户名密码与状态都正确的话,则登陆成功直接跳转到管理端。
后台系统退出功能
需求分析
登录成功后,应该还有对应的登出功能
前端展示的页面右上角有个关机的按钮,那就是前端发起登出响应的按钮。
查看前端代码后,发现是发送了一个employee/logout的post请求,我们则需要去实现这个操作。
代码开发
退出只需返回到登录界面,并且将先前传入的session数据清除即可。页面跳转在前端代码实现了,我们只需实现数据清除即可。
调用httpServletRequest的getsession()的removeAttribute()方法。
/*** 员工退出* @param httpServletRequest* @return*/@PostMapping("/logout")public R<String> logout(HttpServletRequest httpServletRequest){//清理session中保存的当前员工的Id。httpServletRequest.getSession().removeAttribute("employee");return R.success("退出成功");}
功能测试:
登录成功后,浏览器保存有数据
点击登出按钮
保存的数据被清除。