瑞吉外賣day1

来源:https://www.cnblogs.com/projectruiji/archive/2023/05/06/17366872.html
-Advertisement-
Play Games

一、項目簡介 隨著互聯網迅速發展,人們的生活已經越來越離不開互聯網,人們足不出戶就可以工作、買賣、學習等。對於在校學生,通過網路教育不僅可以隨時進行網路學習,也可以根據學習的情況自我檢測,有利於學生高效、快捷地掌握所學的知識。 本系統預設計的基於網路的學生自測系統將實現多種用戶(包括學生、教師)同時 ...


項目整體介紹

項目介紹

本項目(瑞吉外賣)是專門為餐飲企業(餐廳、飯店)定製的一款軟體產品,包括系統管理後臺和移動端應用兩部分。其中系統管理後臺主要提供給餐飲企業內部員工使用,可以對餐廳的菜品、套餐、訂單等進行管理維護。移動端應用

主要提供給消費者使用,可以線上瀏覽菜品、添加購物車、下單等。
本項目共分為3期進行開發:
第一期主要實現基本需求,其中移動端應用通過H5實現,用戶可以通過手機瀏覽器訪問。

第二期主要針對移動端應用進行改進,使用微信小程式實現,用戶使用起來更加方便。

第三期主要針對系統進行優化升級,提高系統的訪問性能。

技術選型

 功能架構

角色

  • 後臺系統管理員:登錄後臺管理系統,擁有後臺系統中的所有操作許可權

  • 後臺系統普通員工:登錄後臺管理系統,對菜品、套餐、訂單等進行管理
  • C端用戶:登錄移動端應用,可以瀏覽菜品、添加購物車、設置地址、線上下單等

 開發環境搭建

資料庫環境搭建

 maven環境搭建

創建maven項目導入相關依賴

將前端靜態資源放到resource目錄下

 

創建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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 視頻鏈接:https://www.bilibili.com/video/BV1Cv411372m?p=121&vd_source=9140dcc493e34a9f4e95ca2f8f71bbd3 1 Data 1.1 Date類概述 Date類的對象在java中代表的是當前所在系統的此刻日期時間。 ...
  • 初學java後,需要一個小練手的java web項目,酒店數據信息管理。酒店CRUD項目。基於java的酒店管理,基於vue實現的酒店項目,酒店管理系統。 ...
  • 一、項目簡介 隨著互聯網迅速發展,人們的生活已經越來越離不開互聯網,人們足不出戶就可以工作、學習等。對於在校學生,通過網路教育不僅可以隨時進行網路學習,也可以根據學習的情況自我檢測,有利於學生高效、快捷地掌握所學的知識。 本系統預設計的基於網路的學生自測系統將實現多種用戶(包括學生、教師、管理員)同 ...
  • 概述(Java doc) 該註解開啟spring的註解驅動事務管理功能,通常標註在@Configuration類上面用於開啟命令式事務管理或響應式事務管理。 @Configuration @EnableTransactionManagement public class AppConfig { @B ...
  • 基於java的電影院售票管理系統設計,電影院管理系統,影院會員,影院售票平臺,電影院會員管理平臺,線上售票平臺 ...
  • spring-tx概述 spring-tx包使用註解驅動和AOP通知將事務開啟、提交/回滾、以及複雜的傳播機制封裝了起來,開發者不再需要編寫事務管理的代碼,而是可以只關註自己的業務邏輯。 本文將簡單介紹spring-tx使用步驟以及七種事務傳播級別。 後續文章會閱讀源碼,深入分析spring-tx ...
  • 教程簡介 UNIX / Linux操作系統(OS)入門教程 - 從基本概念開始,簡單易學地瞭解UNIX的基礎知識,包括入門,Unix Korn和Bourne Shell和編程,文件許可權/訪問模式,環境,實用程式,管道和過濾器,網路通信實用程式,文件系統,目錄,記憶體管理,特殊變數,vi編輯器,什麼是S ...
  • MATLAB 備忘清單 MATLAB是美國MathWorks公司出品的商業數學軟體,用於數據分析、無線通信、深度學習、圖像處理與電腦視覺、信號處理、量化金融與風險管理、機器人,控制系統等領域。 MATLAB是matrix&laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室),軟體主要面對科 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...