一、項目簡介 隨著互聯網迅速發展,人們的生活已經越來越離不開互聯網,人們足不出戶就可以工作、買賣、學習等。對於在校學生,通過網路教育不僅可以隨時進行網路學習,也可以根據學習的情況自我檢測,有利於學生高效、快捷地掌握所學的知識。 本系統預設計的基於網路的學生自測系統將實現多種用戶(包括學生、教師)同時 ...
項目整體介紹
項目介紹
本項目(瑞吉外賣)是專門為餐飲企業(餐廳、飯店)定製的一款軟體產品,包括系統管理後臺和移動端應用兩部分。其中系統管理後臺主要提供給餐飲企業內部員工使用,可以對餐廳的菜品、套餐、訂單等進行管理維護。移動端應用
心
主要提供給消費者使用,可以線上瀏覽菜品、添加購物車、下單等。
本項目共分為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