Java精品项目瑞吉外卖之登陆的完善与退出功能篇

目录
  • 一. 需求分析
  • 二.功能实现
  • 三.功能测试
  • 四. 登录功能完善
    • 4.1 问题分析
    • 4.2 实现步骤
    • 4.3 代码实现

上一篇:

后端登录功能实现

一. 需求分析

员工登录之后,页面跳转到后台首页(backend/index.html)此前会显示用户登录的用户名,点击退出按钮退出系统。

请求API:

说明
请求地址URL employee/loginout
请求参数
返回参数 ({
  "code": 1,
  "msg": null,
  "data": "退出成功",
  "map": {}
}

二.功能实现

只需要清除session即可,在controller中添加如下代码:

/**
     * 后管登出
     * @param request
     * @return
     */
    @PostMapping("/logout")
    public R<String> loginOut(HttpServletRequest request){
        // 去除session
        request.getSession().removeAttribute("employee");
        return R.success("退出成功");
    }

三.功能测试

登录成功后是有session记录的:

点击页码按钮退出后session清除,并返回登录页面就表示成功了。

四. 登录功能完善

4.1 问题分析

前面已经完成了登录功能的开发,但会发现一个问题,就是员工不登录情况下,依然能够进入到目标页面很显然这并不是我们想看到的。

那如何实现呢?使用过滤器或者拦截器,在过滤器或者拦截器中判断用户是否是登录状态,没有登录则跳转到登录页面。

4.2 实现步骤

  • 创建自定义过滤器LoginCheckFilter.java
  • 启动类上加入@ServletComponentScan(这个不要忘记了)
  • 完善过滤器处理逻辑

过滤器处理逻辑主要如下:

  • 获取本次处理请求的URL
  • 判断本次请求是否需要处理
  • 若不需要,直接放行
  • 判断登陆状态,若已经登陆直接放行
  • 若未登陆则返回未登陆结果

流程图如下:

4.3 代码实现

package com.itheima.reggie.filter;
import com.alibaba.fastjson.JSON;
import com.itheima.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @author jektong
 * @date 2022/4/26
 */
@WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter {
    // 进行路径匹配,支持通配符
    public static final AntPathMatcher ANT_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;
        //获取本次处理请求的URL
        String requestURI = request.getRequestURI();
        String[] urls = new String[]{
          "/employee/login",
          "/employee/logout",
          "/backend/**",
          "/front/**"
        };
        //判断本次请求是否需要处理
        boolean check = this.check(urls, requestURI);
        log.info("拦截到请求:{}", 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;
        }
        //若未登陆则返回未登陆结果
        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
        return;
    }
    /**
     * 进行路径匹配,检查是否可以放行
     * @param urls 不拦截的路径
     * @param requestURI 请求路径
     * @return
     */
    public boolean check(String[] urls, String requestURI) {
        for(String url : urls){
            boolean match = ANT_PATH_MATCHER.match(url,requestURI);
            if(match){
                return true;
            }
        }
        return false;
    }
}

前端代码(request.js)会通过一个值("NOTLOGIN")来进行拦截器响应匹配后进行页面的跳转:

// 响应拦截器
  service.interceptors.response.use(res => {
      if (res.data.code === 0 && res.data.msg === 'NOTLOGIN') {// 返回登录页面
        console.log('---/backend/page/login/login.html---')
        localStorage.removeItem('userInfo')
        window.top.location.href = '/backend/page/login/login.html'
      } else {
        return res.data
      }
    }

到此这篇关于Java精品项目瑞吉外卖之登陆的完善与退出功能篇的文章就介绍到这了,更多相关Java外卖系统登陆内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java精品项目瑞吉外卖之后端登录功能篇

    目录 一. 登录需求分析 二. 配置返回通用结果类 三. 登录请求API 四. 创建实体类并实现登录逻辑 五. 功能测试 附录 一. 登录需求分析 页面原型 1. 登录页面展示:项目路径(\resources\backend\page\login\login.html) 员工点击登录按钮进行后管平台的登录操作,登录正确以外方式不可登录. 登录处理逻辑 将页面提交的密码进行MD5加密 根据用户名查数据库(查不到返回结果) 比对密码(密码错误返回结果) 查询员工状态,员工状态禁用下不可登录 登录成功

  • java实现外卖订餐系统

    本文实例为大家分享了java实现外卖订餐系统的具体代码,供大家参考,具体内容如下 一.使用技术 javaSE 二.实现功能 外卖订餐系统 具体要求如下: 使用选择结构,循环结构,数组的知识实现一个外卖订餐系统 三.运行效果图 1.订餐功能 2.查看餐袋 3.签收订单 4.删除订单 5.点赞 6.退出 分析图片信息,可以看出我们需要创建一个菜单类,查看餐带类和点赞菜单类 1.首先我们创建一个菜单类,用来定义菜单的属性,使用到封装,构造方法,和toString方法. public class Foo

  • java外卖订餐系统小项目

    本文实例为大家分享了java外卖订餐系统的具体代码,供大家参考,具体内容如下 执行结果: 通过选择功能序号,执行响应的功能: 代码实现: package 外卖订餐系统; /* * 代码优点,使用 循环: * 显示菜单, * 根据用户选择的数字执行相应功能(功能实现:do..while循环.) */ import java.util.Scanner; public class OrderingMsg { public static void main(String[] args) { //数据主题

  • Java精品项目瑞吉外卖之新增菜品与分页查询篇

    目录 一. 新增菜品 1.1需求分析 1.2代码开发 API 代码 二. 分类信息分页查询 三. 删除分类 3.1 需求分析 3.2 核心代码 四. 修改分类 一. 新增菜品 1.1需求分析 后台系统可以管理分类信息,分类菜品分类和套餐分类.当我们在后台系统添加菜品时需要选择一个菜品分类. 当我们在后台系统中添加一个套餐时需要选择一个套餐分类,在移动端也会按照菜品分类和套餐分类来展示对应的菜品和套餐. 同时,在后台系统的分类管理页面分别添加菜品分类与套餐分类: 添加菜品分类 添加套餐分类 数据模

  • Java实战之校园外卖点餐系统的实现

    目录 一.项目简述 二.效果图展示 三.核心代码 管理员controller控制层 管理员角色controler控制层 后台登录控制层 订单模块controller控制层 一.项目简述 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + css + JavaScript + JQuery + Ajax

  • java实现简易外卖订餐系统

    用java实现简易外卖订餐系统,供大家参考,具体内容如下 一.使用技术 javaSE 二.实现功能 外卖订餐系统 具体要求如下: 使用选择结构,循环结构,数组的知识实现一个外卖订餐系统 三.运行效果图 1.订餐功能 2.查看餐袋 3.签收订单 4.删除订单 5.点赞 6.退出 代码实现 public class Order { public static void main(String[] args) { int zero = 1; int x = 0;//订单数组下标 String[] na

  • Java精品项目瑞吉外卖之登陆的完善与退出功能篇

    目录 一. 需求分析 二.功能实现 三.功能测试 四. 登录功能完善 4.1 问题分析 4.2 实现步骤 4.3 代码实现 上一篇: 后端登录功能实现 一. 需求分析 员工登录之后,页面跳转到后台首页(backend/index.html)此前会显示用户登录的用户名,点击退出按钮退出系统. 请求API: 说明 值 请求地址URL employee/loginout 请求参数 无 返回参数 ({  "code": 1,  "msg": null,  "dat

  • Java精品项目瑞吉外卖之员工信息管理篇

    目录 一. 员工信息分页查询 1. 需求分析 2. 代码开发 二. 启用或禁用员工状态 1 需求分析 2 代码开发 前端核心代码 后端核心代码 代码修复 上一篇: 瑞吉外卖项目:新增员工 一. 员工信息分页查询 1. 需求分析 当系统中的用户越来越多页面展示不完整,我们需要通过实现分页的方式去展示员工的信息: 2. 代码开发 在开发代码之前,需要理清楚程序的执行过程与业务逻辑: 页面发送Ajax请求,将分页查询参数(page,pagesize,name)提交到服务端服务端 Controller接

  • Java精品项目瑞吉外卖之员工新增篇

    目录 一. 需求分析 二. 代码开发 三. 编写全局异常处理 一. 需求分析 后台系统可以管理员工信息,通过新增员工来添加后台系统的用户,点击添加用户转至添加页面: 添加员工的信息需要保存至员工表[employee]中,结构如下: 其中员工状态默认设为1,表示账号在初始创建是可用的状态下的. 二. 代码开发 开发过程 开发之前,梳理一下具体的流程: 页面发送ajax请求,将员工输入的数据转换为JSON格式提交至服务器: 服务端控制层接收请求数据并调用业务层将数据保存: 业务层调用持久层(Mapp

  • Java 实战项目之精品养老院管理系统的实现流程

    一.项目简述 本系统功能包括:通知公告,老人管理,护工管理,问答管理等等功能. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持). 项目技术: Springboot + Maven + mybatis+ Vue 等等组成,B/S模式 + Maven管理等等. 系统控制器(登录.注销.修改.新增登)业务: /** * 系统控

  • 超详细讲解Java秒杀项目登陆模块的实现

    目录 一.项目前准备 1.新建项目 2.导入依赖 3.执行sql脚本 4.配置yml文件 5.在启动类加入注解 6.自动生成器 二.前端构建 1.导入layui 2.将界面放到template 3.在js目录下新建目录project 4.新建controller类 三.MD5加密 1.导入帮助包与exception包 2.新建vo类 3.登录方法: 4.密码加密 四. 全局异常抓获 1.给实体类userVo加入注解 2.导入帮助包validate,异常抓获 3.在UserController类方

  • Java实战项目 健身管理系统

    主要技术:springmvc. springboot .mybatis.mysql .jQuery.layui.css.jsp shiro权限控制 主要功能截图如下: 用户登录.首页主要功能有:会员信息管理.会员到期续费管理.充值管理.教练课程管理.私教管理.器材管理.小商品售卖管理.信息统计.修改密码等主要功能: 会员管理.续卡.会员卡类型管理: 教练列表展示和添加修改删除教练信息: 会员私教课程管理: 添加私教信息: 健身课程列表展示查询和添加修改: 健身器材列表展示查询和添加修改: 物品遗

  • Java 实战项目之家居购物商城系统详解流程

    一.项目简述 功能: Java Web精品项目源码,家居商城分类展示,商品展示, 商品下单,购物车,个人中心,后台管理,用户管理,商品管理,分类管理等等. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: Jdbc+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload 打开订单列

  • Java 实战项目锤炼之网上图书馆管理系统的实现流程

    一.项目简述 功能: 区分为管理员用户和普通用户,普通用户:用户登录,个 人信息修改,图书查询,用户借阅,用户归还,管理员用 户:图书馆里,归还管理,借阅信息查询,图书维护,分 类管理,读者管理等等功能. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP + Servlert + html+ css + JavaScript + JQuery

随机推荐