瑞吉外卖day1

项目整体介绍

项目介绍

本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用

主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。
本项目共分为3期进行开发:
第一期主要实现基本需求,其中移动端应用通过H5实现,用户可以通过手机浏览器访问。

第二期主要针对移动端应用进行改进,使用微信小程序实现,用户使用起来更加方便。

第三期主要针对系统进行优化升级,提高系统的访问性能。

技术选型

瑞吉外卖day1

 功能架构

瑞吉外卖day1

角色

  • 后台系统管理员:登录后台管理系统,拥有后台系统中的所有操作权限

  • 后台系统普通员工:登录后台管理系统,对菜品、套餐、订单等进行管理
  • C端用户:登录移动端应用,可以浏览菜品、添加购物车、设置地址、在线下单等

 开发环境搭建

数据库环境搭建

瑞吉外卖day1

瑞吉外卖day1

 maven环境搭建

创建maven项目导入相关依赖

瑞吉外卖day1

将前端静态资源放到resource目录下

 

瑞吉外卖day1

创建webMvc配置类,映射静态资源,解决前端页面放在resource目录下无法访问的问题

@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 设置静态资源映射
* @param registry
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始进行静态资源映射 ");
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");

}
}

后台登录功能开发

 

 @PostMapping("/login")
    public R<Employee> login(HttpServletRequest request, @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);
        //3.如果没有查询结果则返回登陆失败结果
        if (emp==null){
            return R.error("登陆失败");
        }
        //4.密码比对,如果不一致则返回登陆失败结果
        if (!emp.getPassword().equals(password)){
            return R.error("登陆失败");

        }
        //5.查看员工状态,是否为已被禁用
        if (emp.getStatus()==0){
            return R.error("员工已被禁用");
        }
        //6.登录成功,将员工id存入session并返回登陆成功结果
        request.getSession().setAttribute("employee",emp.getId());
        return  R.success(emp);


    }

设置过滤器完善登录功能

@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
@Slf4j
public class loginCheckFilter implements Filter {
    public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        //1.获取本次请求的URI
        String requestURI = request.getRequestURI();
        //2.判断本次请求·是否要处理
        String[] urls = new String[]{
          "/employee/login", "employee/logout","/backend/**","/front/**"
        };
        //判断本次请求是否需要处理
        boolean check = check(urls,requestURI);
        //如果不需要处理,则直接放行
        if (check){
            filterChain.doFilter(request,response);
            return;
        }
        //判断登陆状态,如果以登录,则直接放行
        if (request.getSession().getAttribute("employee")!=null){
            filterChain.doFilter(request,response);
            return;
        }
        //如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据
        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
        log.info("拦截到请求:{}",request.getRequestURI());
        filterChain.doFilter(request,response);
    }
    

    /**
     * 判断请求是否需要处理
     * @param urls
     * @param requestURI
     * @return
     */
    public boolean check(String[] urls,String requestURI){

        for (String url : urls) {
            boolean match = PATH_MATCHER.match(url, requestURI);
            if (match){
                return true;
            }
        }
        return false;
    }
}

PathMatcher接口
Spring的PathMatcher路径匹配器接口,用于支持带通配符的资源路径匹配。

使用场景
PathMatcher接口在Spring的许多场景下使用,比如:

PathMatchingResourcePatternResolver:资源扫描,启动时扫描并加载资源
AbstractUrlHandlerMapping:请求路径映射到 Controller
WebContentInterceptor:拦截器拦截路径分析
接口方法
方法 描述
boolean isPattern(String path) 判断路径是否是模式
boolean match(String pattern, String path) 判断路径是否完全匹配
boolean matchStart(String pattern, String path) 判断路径是否前缀匹配
前缀匹配的意思:路径能与模式的前面部分匹配,但模式可能还有后面多余部分
例如:/test能前缀匹配/test/{id}(但模式还有多余的/{id}部分未匹配)
String extractPathWithinPattern(String pattern, String path) 得到模式匹配的部分值
该方法只返回路径的实际模式匹配部分
例如:myroot/*.html 匹配 myroot/myfile.html 路径,结果为 myfile.html
Map<String, String> extractUriTemplateVariables(String pattern, String path) 提取路径中的路径参数值
Comparator<String> getPatternComparator(String path) 得到一个排序比较器,用于对匹配到的所有路径进行排序
String combine(String pattern1, String pattern2) 合并两个模式
AntPathMatcher类
AntPathMatcher是Spring为PathMatcher接口提供的默认实现,支持Ant风格的路径匹配。

匹配规则
AntPathMatcher支持的匹配规则:

规则 描述
? 匹配一个字符
* 在一个路径段中匹配零个、一个或多个字符
** 匹配零个或多个路径段,直到路径结束
{id} 匹配一个路径段,并将该路径段的值作为变量id的变量值
{id:[a-z]+} 匹配一个满足正则([a-z]+)路径段,并将该路径段的值作为变量id的变量值
4

 

原文链接:https://www.cnblogs.com/projectruiji/p/17366872.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:瑞吉外卖day1 - Python技术站

(0)
上一篇 2023年5月6日
下一篇 2023年5月6日

相关文章

  • java.lang.ArrayStoreException异常的解决方案

    针对“java.lang.ArrayStoreException异常的解决方案”,我为您提供以下完整攻略: 1. 异常分析 首先,我们需要对“java.lang.ArrayStoreException”进行分析,它是Java语言中的一个异常类型,表示试图将数组中的元素存储到与数组中声明类型不兼容的位置上。比如下面这种代码就会抛出该异常: Object[] o…

    Java 2023年5月27日
    00
  • JPA 使用criteria简单查询工具类方式

    JPA 使用 Criteria 简单查询工具类方式,具体步骤如下: 什么是Criteria查询 通常的JPQL查询必须要写类似于SELECT * FROM book WHERE id = 1 这样的SQL语句,书写SQL语句的时侯需要时刻注意SQL语句的拼写,如此繁琐而且费时费力,如果采用Criteria查询,则可以省去SQL语句的书写,Criteria查询…

    Java 2023年5月20日
    00
  • Java实现FTP文件上传

    关于Java实现FTP文件上传,我可以给出一份完整攻略,步骤如下: 步骤一:引入FTP客户端jar包 在Java项目的pom.xml文件中添加以下依赖,引入FTP客户端jar包: <dependency> <groupId>commons-net</groupId> <artifactId>commons-ne…

    Java 2023年5月19日
    00
  • 微信 java 实现js-sdk 图片上传下载完整流程

    微信 Java 实现JS-SDK 图片上传下载完整流程 前置知识 在开发过程中,我们需要了解微信JS-SDK的基本使用方法和原理,了解微信开放平台的基础知识。同时,我们还需要通过Java语言来实现JS-SDK的图片上传下载功能。 实现过程 步骤一:申请应用密钥和JS-SDK权限 在微信开放平台上为自己的应用申请应用密钥,并在公众号后台开启JS-SDK权限。获…

    Java 2023年5月20日
    00
  • 详解Java如何实现图像灰度化

    我将详细讲解“详解Java如何实现图像灰度化”的完整攻略。图像灰度化是指将彩色图像转化为灰度图像的过程,在这个过程中,我们将三个色彩通道的像素值转化为灰度值,转化公式如下: $gray = 0.299 * r + 0.587 * g + 0.114 * b$ 其中 $r, g, b$ 表示红、绿、蓝三个通道的像素值。使用这个公式,我们可以将一个彩色图像转化为…

    Java 2023年5月26日
    00
  • 详解Java8 新特性之日期API

    下面我将为您详细讲解 “详解Java8 新特性之日期API” 的完整攻略。 1. 了解Java8 中的日期API Java8中一项重要的变化就是提供了新的日期API。Java 8中引入了新的日期API是为了弥补旧API中存在的一些问题。使用旧的日期API中存在的问题包括不可变性、线程安全性和性能问题。Java 8中的新的日期API弥补了这些问题,并在操作日期…

    Java 2023年5月20日
    00
  • 深入解析Java中ThreadLocal线程类的作用和用法

    深入解析 Java 中 ThreadLocal 线程类的作用和用法 什么是 ThreadLocal Java 中的 ThreadLocal 是一个线程级别的变量,它是一个简单的线程安全机制,可以用于解决多线程中的并发问题。通俗地说,ThreadLocal 就是一个存放数据的盒子,每个线程有一个专属的盒子,不同线程之间互不干扰。 ThreadLocal 的使用…

    Java 2023年5月20日
    00
  • SpringBoot自动配置深入探究实现原理

    下面我将详细讲解“SpringBoot自动配置深入探究实现原理”的完整攻略。 一、背景介绍 在使用SpringBoot框架开发应用时,我们通常可以通过简单的配置来快速搭建出一个完整的Web应用,并且很多第三方库(例如数据库连接池、缓存技术等)可以自动化集成,使得我们能够快速开发高效质量的应用,这就是SpringBoot自动配置的核心。 二、实现原理介绍 1.…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部