瑞吉外卖day1

打印 上一主题 下一主题

主题 757|帖子 757|积分 2271

项目整体介绍

项目介绍

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

主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。
本项目共分为3期进行开发:
第一期主要实现基本需求,其中移动端应用通过H5实现,用户可以通过手机浏览器访问。
第二期主要针对移动端应用进行改进,使用微信小程序实现,用户使用起来更加方便。
第三期主要针对系统进行优化升级,提高系统的访问性能。
技术选型


 功能架构


角色


  • 后台系统管理员:登录后台管理系统,拥有后台系统中的所有操作权限
  • 后台系统普通员工:登录后台管理系统,对菜品、套餐、订单等进行管理
  • C端用户:登录移动端应用,可以浏览菜品、添加购物车、设置地址、在线下单等
 开发环境搭建

数据库环境搭建



 maven环境搭建

创建maven项目导入相关依赖

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

创建webMvc配置类,映射静态资源,解决前端页面放在resource目录下无法访问的问题
  1. @Slf4j
  2. @Configuration
  3. public class WebMvcConfig extends WebMvcConfigurationSupport {
  4. /**
  5. * 设置静态资源映射
  6. * @param registry
  7. */
  8. @Override
  9. protected void addResourceHandlers(ResourceHandlerRegistry registry) {
  10. log.info("开始进行静态资源映射 ");
  11. registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
  12. registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
  13. }
  14. }
复制代码
后台登录功能开发

 
  1. @PostMapping("/login")
  2.     public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){
  3.         //1.获取密码进行md5加密
  4.         String password = employee.getPassword();
  5.         password=DigestUtils.md5DigestAsHex(password.getBytes());
  6.         //2.根据用户提交的username查询数据库
  7.         LambdaQueryWrapper<Employee> queryWrapper=  new LambdaQueryWrapper<>();
  8.         queryWrapper.eq(Employee::getUsername,employee.getUsername());
  9.         Employee emp = employeeService.getOne(queryWrapper);
  10.         //3.如果没有查询结果则返回登陆失败结果
  11.         if (emp==null){
  12.             return R.error("登陆失败");
  13.         }
  14.         //4.密码比对,如果不一致则返回登陆失败结果
  15.         if (!emp.getPassword().equals(password)){
  16.             return R.error("登陆失败");
  17.         }
  18.         //5.查看员工状态,是否为已被禁用
  19.         if (emp.getStatus()==0){
  20.             return R.error("员工已被禁用");
  21.         }
  22.         //6.登录成功,将员工id存入session并返回登陆成功结果
  23.         request.getSession().setAttribute("employee",emp.getId());
  24.         return  R.success(emp);
  25.     }
复制代码
设置过滤器完善登录功能
  1. @WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
  2. @Slf4j
  3. public class loginCheckFilter implements Filter {
  4.     public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
  5.     @Override
  6.     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  7.         HttpServletRequest request = (HttpServletRequest) servletRequest;
  8.         HttpServletResponse response = (HttpServletResponse) servletResponse;
  9.         //1.获取本次请求的URI
  10.         String requestURI = request.getRequestURI();
  11.         //2.判断本次请求·是否要处理
  12.         String[] urls = new String[]{
  13.           "/employee/login", "employee/logout","/backend/**","/front/**"
  14.         };
  15.         //判断本次请求是否需要处理
  16.         boolean check = check(urls,requestURI);
  17.         //如果不需要处理,则直接放行
  18.         if (check){
  19.             filterChain.doFilter(request,response);
  20.             return;
  21.         }
  22.         //判断登陆状态,如果以登录,则直接放行
  23.         if (request.getSession().getAttribute("employee")!=null){
  24.             filterChain.doFilter(request,response);
  25.             return;
  26.         }
  27.         //如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据
  28.         response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
  29.         log.info("拦截到请求:{}",request.getRequestURI());
  30.         filterChain.doFilter(request,response);
  31.     }
  32.    
  33.     /**
  34.      * 判断请求是否需要处理
  35.      * @param urls
  36.      * @param requestURI
  37.      * @return
  38.      */
  39.     public boolean check(String[] urls,String requestURI){
  40.         for (String url : urls) {
  41.             boolean match = PATH_MATCHER.match(url, requestURI);
  42.             if (match){
  43.                 return true;
  44.             }
  45.         }
  46.         return false;
  47.     }
  48. }
复制代码
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 extractUriTemplateVariables(String pattern, String path)        提取路径中的路径参数值
Comparator getPatternComparator(String path)        得到一个排序比较器,用于对匹配到的所有路径进行排序
String combine(String pattern1, String pattern2)        合并两个模式
AntPathMatcher类
AntPathMatcher是Spring为PathMatcher接口提供的默认实现,支持Ant风格的路径匹配。
匹配规则
AntPathMatcher支持的匹配规则:
规则        描述
?        匹配一个字符
*        在一个路径段中匹配零个、一个或多个字符
**        匹配零个或多个路径段,直到路径结束
{id}        匹配一个路径段,并将该路径段的值作为变量id的变量值
{id:[a-z]+}        匹配一个满足正则([a-z]+)路径段,并将该路径段的值作为变量id的变量值
4
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表