java 项目之瑞吉外卖 笔记1 软件开发整体介绍 员工登录功能 登录过滤器设置

news2025/1/18 10:47:01

软件开发流程

 角色分工

软件环境

 

 

 

 

 

 开发环境搭建

 

 

创建工程

application.yml: 

server:
  port: 80
spring:
  application:
    name: reggie_take
  datasource:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/reggie
      username: root
      password: 123


mybatis-plus:
  configuration:
    #是否
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>3.0.0</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.itheima</groupId>
   <artifactId>reggie_take</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>reggie_take</name>
   <description>reggie_take</description>
   <properties>
      <java.version>18</java.version>
   </properties>
   <dependencies>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
         <scope>compile</scope>
      </dependency>

      <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.4.2</version>
      </dependency>

      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.20</version>
      </dependency>

      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.76</version>
      </dependency>

      <dependency>
         <groupId>commons-lang</groupId>
         <artifactId>commons-lang</artifactId>
         <version>2.6</version>
      </dependency>

      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <scope>runtime</scope>
      </dependency>

      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid-spring-boot-starter</artifactId>
         <version>1.2.8</version>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

 我们的静态资源没有放在static包里,所以要做相应的映射

后台登录功能开发(springboot 不要用3.0.0)

controller:

@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
    @Resource
    private EmployeeService employeeService;

    /**
     * 员工登录
     * @param
     * @param employee
     * @return
     */
    @PostMapping("/login")
    public R login(HttpServletRequest request, @RequestBody Employee employee){
        //将页面提交的密码加密
        String password =employee.getPassword();
        password= DigestUtils.md5DigestAsHex(password.getBytes());
        //2.根据页面提交的用户名查询数据库
        LambdaQueryWrapper<Employee> queryWrapper =new LambdaQueryWrapper<>();
        queryWrapper.eq(Employee::getUsername,employee.getUsername());
        Employee emp =employeeService.getOne(queryWrapper);
        //如果没查询到就返回登录失败
        if(emp == null) {
            return new R(0,"登录失败",null);

        }
        //查到了就进行密码比对
        if (!emp.getPassword().equals(password)){
            return new R(0,"登录失败");
        }
        //比对成功  查看员工状态是否为禁用
        if(emp.getStatus()==0){
            return new R(0,"账号已禁用");
        }
        //登录成功,将员工id存入Session 并返回登录成功结果
        request.getSession().setAttribute("employee",emp.getId());
        return new R(1,"登录成功",emp);
    }


    @PostMapping("/logout")
    public R logout(HttpServletRequest request){
        request.getSession().removeAttribute("employee");
        return new R(1,"退出成功");
    }
}

问题:当前我们虽然完成了功能,但是用户不登录,还是能访问系统首页,是不合理的

所以用户没有登录,必须要跳转到登录页面

答案就是使用过滤器或者拦截器,在过滤器或者拦截器中判断用户是否已经完成登录,如果没有登录则跳转到登录页面。

 

@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;
      log.info("拦截到请求:{}",request.getRequestURI());
    //1.获取本次请求的URI
        String requestURI =request.getRequestURI();
        //定义不需要处理的请求路径
        String[] urls= new String[]{
                "/employee/login",
                "/employee/logout",
                "/backend/**",
                "/front/**"
        };
        //判断本次请求是否需要处理
        boolean check =check(urls,requestURI);

        //如果不需要处理则直接放行
        if(check){
            log.info("本次请求{}不需要处理",requestURI);
            filterChain.doFilter(request,response);
            return;
        }
        //判断登录状态,如果已登录,则直接放行
        if(request.getSession().getAttribute("employee")!=null){
            log.info("用户已登录,id为:{}",request.getSession().getAttribute("employee"));
            filterChain.doFilter(request,response);
            return;
        }
        log.info("未登录");
        //如果未登录则返回未登录结果,通过输出流的方式像客户端页面响应数据
        response.getWriter().write(JSON.toJSONString((new R(0,"NOTLOGIN"))));
        return;

    }


    /**
     * 路径匹配,检查请求是否需要放行
     * @param urls
     * @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;
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitHub日排行第二名!手把手刷算法项目fucking-algorithm,干翻算法

今天给大家分享一个开源项目&#xff0c;在 GitHub 排行榜上今天特别火&#xff0c;都爬到了日排行榜的第二名。 大家想知道&#xff0c;面试互联网大厂&#xff0c;必面的是什么吗&#xff1f;当然是算法。作为程序员&#xff0c;互联网大厂的面试&#xff0c;算法是最重要的…

如何进行系统设计

文章目录1. 理解需求1.1 功能性需求1.2 非功能性需求2. 系统设计3. Api设计4. 数据模型设计5. 高可用、高性能、可监控等数据密集型应用设计凤凰架构 重点&#xff1a;自己整理的非权威&#xff0c;不具代表性&#xff0c;自己去取舍哈。 1. 理解需求 1.1 功能性需求 解决什么…

Python -- 流程控制语句

目录 1、条件判断语句 1.1 if语句的使用 1.2 if...else语句的使用 1.3 if...elif...else语句的使用 2、循环语句 2.1 while语句 2.2 for语句 3、break和continue 4、循环中else的使用 1、条件判断语句 1.1 if语句的使用 if语句是用来进行判断的&#xff0c;其使用格式…

大一学生《基于HTML+CSS制作体育篮球网页》期末网页制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

如何在 PDF 中搜索并准确找到您要查找的文本内容

您是否需要在冗长的 PDF 文档中快速查找单词或短语&#xff1f; 没有什么比打开一个只有文本墙的大型 PDF 文档更令人沮丧的了。或者必须在很长的文本中找到特定的单词或短语。或者很长的 PDF。 它不方便、耗时&#xff0c;如果时间紧迫则更糟。 幸运的是&#xff0c;大多…

tensorflower delegate介绍

为什么要使用delegate delegate是什么意思&#xff1f; 性能优化的方法&#xff1a; 量化剪枝权重聚集利用硬件加速器 其中&#xff0c;当我们使用硬件加速器的时候&#xff0c;可以获得相应硬件的特性&#xff0c;提高性能&#xff0c;降低功耗。但是硬件加速器有很多种&am…

【外汇天眼】外汇市场交易基本面分析:什么是利率平价(IRP)?

利率平价&#xff08;平价Interest RateParity&#xff0c;也称为IRP利息率&#xff0c;是指外汇市场在所有可自由兑换货币的预期回报率相同时所能提供的平衡条件。 利率平价规定&#xff0c;一种货币对另一种货币的升值&#xff08;贬值&#xff09;必须由利率差异的变化抵销…

音乐推荐系统设计

文章目录问题描述如何解决系统设计评测指标推荐系统的用户画像运动音乐场景用户行为分析睡眠音乐场景用户行为分析治愈音乐场景用户行为分析其他音乐场景用户行为分析问题描述 移动网络和数字多媒体技术的飞速发展促进了数字音乐产业的共享与广泛传播&#xff0e;对用户而言&a…

TensorRT框架解析

简介&#xff1a; 官网网址&#xff1a; Installation Guide :: NVIDIA Deep Learning TensorRT Documentation NVIDIA TensorRT 的核心是一个C库。 这有助于在 NVIDIA 图形处理单元 &#xff08;GPU&#xff09; 上进行高性能推理。 TensorRT 采用经过训练的网络&#xff0…

计算机毕设Python+Vue校园失物招领平台(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【2023程序员必看】人工智能行业分析

IT行业薪资高已成为大家的共识&#xff0c;但你知道哪个岗位薪资在IT行业中也是“高高在上”吗&#xff1f; IT届薪资天花板&#xff0c;人工智能当仁不让&#xff01; 当下人工智能就业行情怎么样 22年毕业生春招就业情况 根据《2022年春招市场行情周报》显示&#xff0c;人…

【Git】拉取远程仓库的指定目录,图文详细步骤

Git概述 Git&#xff08;读音为/gɪt/&#xff09;是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 分布式相比于集中式的最大区别在于开发…

[附源码]Python计算机毕业设计个人博客Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

零碎知识点

零碎知识&#xff1a; 1.**在Python中表示乘方运算&#xff0c;**2即为求平方&#xff0c;**3表示3次方&#xff1b; 2.为赋值运算符&#xff0c;表示把右侧的数据赋值给左边的变量&#xff0c;例如&#xff1a;a 10&#xff1b; 3.变量名的命名规则&#xff1a; 变量名由数字…

【论文阅读】(2018)The Meet-in-the-Middle Principle for Cutting and Packing Problems

文章目录一、摘要二、介绍三、Normal Patterns 正常模式四、Meet-in-the-Middle Principle4.1 MIM Patterns4.2 MIM 的性质4.2.1 性质14.2.2 性质24.2.3 性质34.2.4 性质4五、Evaluation六、Conclusions论文来源&#xff1a;&#xff08;2018&#xff09;The Meet-in-the-Middl…

Odoo 16 企业版手册 - 采购之三向匹配采购收货和账单

三向匹配采购收货和账单的方式 Odoo 16采购模块中的3向方式匹配采购收货和账单功能将帮助您确保您仅为交付到您地址的产品支付供应商账单。在收到采购订单中订购的产品之前&#xff0c;您可能会收到供应商的供应商账单。但是&#xff0c;您可能希望推迟付款&#xff0c;直到产品…

tkinter: 基本+Button+Layout

简介 简介 Tcl 动态解释型编程语言可独立执行&#xff0c;多嵌入C程序中作为脚本引擎&#xff0c;或者作为使用Tk工具包的接口Tcl库可以创建一个或多个Tcl解释器实例&#xff0c;然后在这些实例上运行C或Tcl命令和脚本每个解释器有一个事件队列&#xff0c;接受事件并处理他们…

未来5年,Python发展前景如何?什么方向最吃香?

有同学提问——请问就未来3到5年来讲&#xff0c;python的发展趋势如何&#xff1f;我要不要深学下去&#xff1f;如果学建议从事python的哪个方向&#xff1f; 今天我们就来看一下一线技术人员的分析与解答。 因为一直在开发一线工作&#xff0c;经历了好些环节&#xff0c;…

PyTorch可视化工具Visdom教程

文章目录什么是visdom安装和启动安装启动可视化折线图Line什么是visdom visdom是Facebook为PyTorch开发可视化工具,支持numpy和tensor&#xff0c;功能和Tensorboard差不多&#xff0c;在三维空间数据展示十分出色&#xff0c;其次可以远程访问&#xff0c;随时随地观察训练效…

Linux 网络流量监控工具

Linux 网络流量监控 Linux 网络流量监控是捕获和分析企业的 Linux 网络流量的过程。 为什么要监控 Linux 网络流量 深入了解网络流量对于测量和管理带宽使用情况非常重要。分析 Linux 网络流量有助于识别带宽瓶颈、最高用量者和其他可能影响网络性能的网络问题。 Linux 网络…