当前位置: 首页 > news >正文

基于 Spring Boot 瑞吉外卖系统开发(二)

基于 Spring Boot 瑞吉外卖系统开发(二)

员工登录功能实现

员工登录页面login.html存放在/resources/backend/page/login目录下。
启动项目,在浏览器中通过地址“http://localhost:8080/backend/page/login/login.html”访问员工登录页面。
在这里插入图片描述
按下快捷键F12打开浏览器调试工具后,单击“登录”按钮,浏览器抓取到登录的请求信息。
在这里插入图片描述

定义Mapper接口

自定义的Mapper接口可以继承BaseMapper获得通用的增删改查功能。
在项目的src/main/java目录下创建com.itheima.reggie.mapper包,在该包下创建员工Mapper接口EmployeeMapper。

@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {

}

定义Service接口

public interface EmployeeService extends IService<Employee> {
}

定义Service实现类

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

}

定义Controller类

@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @PostMapping("/login")
    public R<Employee> login(@RequestBody Employee employee, HttpServletRequest request){
        //1.将页面提交的密码password进行MD5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        //2.根据页面提交的用户名username查询数据库
        QueryWrapper<Employee> query = new QueryWrapper<>();
        query.eq("username", employee.getUsername());
        Employee one = employeeService.getOne(query);
        //3.如果没有查询到员工信息或者密码不正确,则返回登录失败结果
        if(one==null || !one.getPassword().equals(password)){
            return R.error("用户名或密码错误");
        }
        //4.查看员工状态,如果为已禁用状态,则返回员工已禁用结果
        if(one.getStatus() == 0){
            return R.error("账号已禁用");
        }
        //5.登录成功,将员工Id存入Session并返回员工信息
        request.getSession().setAttribute("loginEmployee", one);
        return R.success(one);
    }
}

登录功能测试

启动项目,在浏览器中通过地址“http://localhost:8080/backend/page/login/login.html”访问员工登录页面,在登录页面使用错误的账号或密码进行登录。
在这里插入图片描述
使用正确的账号和密码进行登录。
在这里插入图片描述

登录拦截功能

管理端的员工登录已经实现完成,但是此时员工如果不登录,也可以直接访问管理端的其他页面。
对此,可以使用拦截器对请求进行拦截判断,判断员工是否已经完成登录,如果没有登录则跳转到登录页面。
com/itheima/reggie/config/LoginInterceptor.java

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object loginEmployee = request.getSession().getAttribute("loginEmployee");
        if  (loginEmployee == null) {
            //未登录,返回登录页
            response.sendRedirect("/backend/page/login/login.html");
            return  false ; //不放行
        }
        return  true ; //放行
    }

}

com/itheima/reggie/config/WebMvcConfig.java中注册拦截器,并设置拦截的路径。

    /**
     * 员工登录拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/backend/page/**","/backend/index.html")
                .excludePathPatterns("/backend/page/login/login.html");
    }

这里拦截器只设置了拦截前端的页面,真实开发后端接口也需要拦截。

至此,员工没有成功登录的话,访问其他路径都会自动跳转到登录页面。

员工退出登录

员工登录成功后,会将对应的员工信息存入到Session中,以记录员工的登录状态。相反,如果想要实现员工退出,则可以在收到退出请求后,将当前员工存放在Session中的信息清除即可。
/controller/EmployeeController.java 添加logout方法。

    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest request){
        request.getSession().removeAttribute("loginEmployee");
        return R.success("退出成功");
    }

至此,点击后台首页右上角退出按钮进行退出。
在这里插入图片描述

http://www.dtcms.com/a/118299.html

相关文章:

  • php调用大模型应用接口实现流式输出以及数据过滤
  • Redis常见问题排查与解决方案指南
  • HCIA二层综合实验
  • 一款轻量级的Docker日志查看器!!
  • LeetCode 每日一题 2025/3/31-2025/4/6
  • 网络攻防快速入门笔记web | 02 SQL注入
  • Elixir语言的云计算
  • 示例项目文档模板集:TaskBoard 任务管理系统
  • linux环境下的硬盘分区格式化工具介绍 fdisk,gdisk,parted,cfdisk,cgdisk,sfdisk,gparted 笔记250407
  • 构筑数字身份管理体系 赋能企业数字化转型
  • 使用阿里ECS搭建web服务器
  • GO简单开发grpc
  • Oracle数据库数据编程SQL<5 正则表达式函数*****>
  • C++——智能指针详解及实现
  • 青少年编程与数学 02-015 大学数学知识点 07课题、数值分析
  • 全面支持MCP协议,开启便捷连接之旅,MaxKB知识库问答系统v1.10.3 LTS版本发布
  • 12AI搭建preparationのCIFAR-10数据集分类(论训练的必要性)
  • Redis设计与实现-集群
  • 数字政府政务服务领域智能化应用解决方案
  • 硬件产品经理:智慧标签产品需求说明
  • AI智算-K8s如何利用GPFS分布式并行文件存储加速训练or推理
  • Windows环境下PyCharm 配置miniforge
  • 前端开发vue项目(node-modules 可视化神器 Node Modules Inspector)
  • 【题解-Acwing】798. 差分矩阵
  • java版鸿鹄招采系统源码招投标系统源码 供应商招投标平台源码-数字化浪潮下的招投标管理系统:技术赋能采购全流程
  • 【我赢职场】安克创新自适应能力cata测评全解析
  • Docker学习--网络相关命令
  • Kubernetes 集群搭建(三):使用dashboard用户界面(需要访问外网获取yaml)
  • 2010年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析
  • 【算法实践】跳跃游戏——计算到达终点的最小跳数