第二篇:吉瑞外卖项目__后台登录功能开发_后台退出功能开发

简介: 第二篇:吉瑞外卖项目__后台登录功能开发_后台退出功能开发

后台登录功能开发


需求分析

页面原型展示

1.png


登录页面展示


(页面位置:项目/resources/backend/page/login/login.html)


2.png


查看登录请求信息


通过浏览器调试工具(F12),可以发现,点击登录按钮时,页面会发送请求(请求地址为http://localhost:8080/employee/login)并提交参数(username和password)


此时报404,是因为我们的后台系统还没有响应此请求的处理器,所以我们需要创建相关类来处理登录请求


3.png


分析前端页面代码


只有当res中的code数据 == 1时候,才可以继续往下执行的。将对象转换成JSON格式。


4.png


代码开发


创建Employee实体类


@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层


这里只需要写接口就行,因为使用的是动态代理创建实体类的。接口参数里面要写对应的实体类


@Mapper中包含了将对象加入到Spring容器中


@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {
}


创建Service层


public interface EmployeeService extends IService<Employee> {
}


先继承一个父类,第一个参数指的是dao层的接口,第二个参数指的是实体类,然后实现接口


@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
}


Controller层


@RestController 是@controller和@ResponseBody 的结合


将当前修饰的类注入SpringBoot IOC容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。


该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Object,它会以Json字符串的形式返回给客户端


@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployController {
    @Autowired
    private EmployeeService employeeService;
}


返回结果类R


此类是一个通用结果类,服务端响应的所有结果最终都会包装成此种类型返回给前端页面。


如果成功的话,传递的是Employee的对象,如果失败的话,传递的是一句错误语句。


@Data
public class R<T> {
    private Integer code; //编码:1成功,0和其它数字为失败
    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;
    }
}


在Controller中创建登录方法


99cad1055b7d49098cc5ecf1c27edafe.png


处理逻辑如下:


  • 将页面提交的密码password进行md5加密处理


//        1. 将页面提交的密码进行md5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());


  • 根据页面提交的用户名username查询数据库


//        2. 根据username查询数据库
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Employee::getUsername,employee.getUsername());  // 为sql语句添加条件,第一个参数指的是数据库对象中的列名字,第二个参数指的是获取到的employee参数。
        Employee emp = employeeService.getOne(queryWrapper);  // 唯一性查询,


  • 如果没有查询到则返回登录失败结果


//        3. 如果没有查询到则返回登录失败结果
        if (emp == null) {
            return R.error("登录失败");
        }


密码比对,如果不一致则返回登录失败结果


//        4. 密码比对,如果密码不一致则返回
        if (!emp.getPassword().equals(password)) {
            return R.error("登录失败");
        }


查看员工状态,如果为已禁用状态,则返回员工已禁用结果


//        5. 查看员工状态是否可以使用
        if (emp.getStatus() == 0) {
            return R.error("账号已禁用");
        }


  • 登录成功,将员工id存入Session并返回登录成功结果
//        6. 登录成功,将员工id存放到session,并返回正确的结果
        request.getSession().setAttribute("employee",emp.getId());
        return R.success(emp);
    }


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


后台退出功能开发


后台退出功能开发


需求分析


员工登录成功后,页面跳转到后台系统首页面(backend/index.html),此时会显示当前登录用户的姓名


如果员工需要退出系统,直接点击右侧的退出按钮即可退出系统,退出系统后页面应跳转回登录页面


代码开发



用户点击页面中退出按钮,发送请求,请求地址为/employee/logout,请求方式为POST。

我们只需要在Controller中创建对应的处理方法即可,具体的处理逻辑:

1、清理Session中的用户id

2、返回结果


// 员工退出
    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest request ) {
//        清除session
        request.getSession().removeAttribute("employee");
        return R.success("退出成功");
    }
相关文章
|
SQL 关系型数据库 Linux
RDS for MySQL权限问题(错误代码:1227,1725)
RDS for MySQL权限问题(错误代码:1227,1725)   1. 错误信息 2. 错误出现的场景 3. 错误原因 4. 解决 4.1 去除 DEFINER 子句 4.2 去除 GTID_PURGED 子句 4.
10283 58
|
传感器 运维 物联网
蓝牙Mesh网络:连接未来的智能解决方案
蓝牙Mesh网络:连接未来的智能解决方案
2804 12
|
弹性计算 运维 Ubuntu
|
9月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
280 10
|
SQL 安全 PHP
PHP安全性深度剖析:防范常见漏洞与最佳实践####
本文深入探讨了PHP编程中不可忽视的安全隐患,重点介绍了SQL注入、XSS攻击、CSRF攻击及文件包含漏洞等四大常见安全威胁。通过详尽的案例分析与防御策略阐述,为开发者提供了一套实用的安全编码指南。文章强调,提升代码安全性是保障Web应用稳健运行的关键,鼓励开发者在日常开发中积极践行安全最佳实践。 ####
|
存储 SQL 数据处理
数据库设计与管理的要点
在数据库设计和管理过程中,清晰的权限控制、数据处理逻辑、以及高效的查询优化,都是不可或缺的组成部分。
253 2
|
SQL 数据库 索引
SQL语句实现投影连接:方法与技巧详解
在SQL数据库查询中,投影和连接是两个核心概念
|
人工智能 云栖大会
2024云栖大会,我们来了!
2024云栖大会亮点介绍
830 1
|
Linux 数据处理
探索Linux中的namei命令:文件路径解析的利器
`namei`是Linux工具,解析文件路径展示每个组件详情,包括类型、权限、属主等。它递归从根目录开始,帮助理解文件系统结构,尤其处理符号链接和挂载点。使用 `-l` 选项提供长格式输出, `-m` 以挂载点显示, `-x` 显示调试信息。示例用法如解析`/home/user/documents/report.txt`路径。注意权限、路径正确性及符号链接影响。可与其他命令结合使用。