基于Springboot外卖系统05:用户非登陆状态的页面拦截器实现

1. 完善登录功能

1.1 问题分析

用户访问接口验证,如果用户没有登录,则不让他访问除登录外的任何接口。
1.前端登录,后端创建session,返给前端

2.前端访问其他接口,失效或不存在,则返回失效提示,前端根据接口返回的失效提示,让其跳转到登录界面

1). 目前现状

用户如果不登录,直接访问系统首页面,照样可以正常访问。

 2). 理想效果

只有登录成功后才可以访问系统中的页面,如果没有登录, 访问系统中的任何界面都直接跳转到登录页面。

 1.2 拦截器思路

 如果未登录,我们需要给前端返回什么样的结果呢? 这个时候, 我们可以去看看前端是如何处理的 ?

 1.3 代码实现

1). 定义登录校验过滤器

自定义一个过滤器 LoginCheckFilter 并实现 Filter 接口, 在doFilter方法中完成校验的逻辑。 

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;/*** Description: 检查用户是否已经完成登陆*/@WebFilter(filterName = "LoginCheckFilter",urlPatterns = "/*")  //设置拦截器,设置拦截的网页区域
@Slf4j
public class LoginCheckFilter implements Filter {// 路径匹配器,支持通配符,因为下面的序列使用了通配符// AntPathMatcher匹配规则  ? 匹配一个字符    * 匹配0个或多个字符   ** 匹配0个或多个目录/字符public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)servletRequest;HttpServletResponse response = (HttpServletResponse)servletResponse;//  A. 获取本次请求的URIString requestURI = request.getRequestURI();log.info("拦截的请求:{}",requestURI);// 定义不拦截的序列,只拦截页面数据请求,不拦截页面格式String[] urls = new String[]{"/employee/login","/employee/logout","/backend/**","/front/**"};//  B. 判断本次请求, 是否需要登录, 才可以访问boolean check = check(urls, requestURI);//  C. 如果不需要,则直接放行if(check){log.info("本次请求{}不需要处理",requestURI);filterChain.doFilter(request,response);return;}//  D. 判断登录状态,如果已登录,则直接放行if(request.getSession().getAttribute("employee")!=null){log.info("用户已登录,用户id为:{}",request.getSession().getAttribute("employee"));filterChain.doFilter(request,response);return;}//  E. 如果未登录, 则返回未登录结果response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));return;}public boolean check(String[] urls,String requestURI){/**@Description: 路径匹配,检查本次请求是否需要放行* @author LiBiGo* @date 2022/8/12 16:50*/for (String url : urls) {boolean match = PATH_MATCHER.match(url, requestURI); // 使用通配符对象,配对资源if(match){return true;}}return false;}
}

2). 开启组件扫描

package com.itheima.reggie;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;@Slf4j //是lombok中提供的注解, 用来通过slf4j记录日志。
@SpringBootApplication // 启动类
// 需要在引导类上,加上Servlet组件扫描的注解,来扫描过滤器配置的@WebFilter注解,扫描后,使过滤器在运行时生效。
@ServletComponentScan //  扫描拦截器注解public class ReggieApplication {/**@Description: 当搭建完上述的基础环境之后, 就可以通过引导类, 启动该项目。* @author LiBiGo* @date 2022/8/12 0:23*/public static void main(String[] args) {SpringApplication.run(ReggieApplication.class,args);log.info("项目启动成功............");}
}

1.4 功能测试

将工程重启,然后在浏览器地址栏直接输入系统管理后台首页,然后看看是否可以跳转到登录页面即可。

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

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

相关文章

python删除指定行_关于csv:删除python中的特定行和对应文件

我想删除90%的"转向"值等于0的行。这三个图像都有一个对应的图像文件,中间,左边和右边。我也要删除它们。csv文件如下:我编写了以下代码,以至少获取转向值为0的文件。我所需要的就是随机获取90%的文件并删除它们的代码。…

I2C总线传输协议

简介 I2C(Inter-integrated Circuit)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它只需要两根信号线来完成信息交换。I2C最早是飞利浦在1982年开发设计并用于自己的芯片上,一开始只允许100kHz…

基于Springboot外卖系统06: 新增员工功能+全局异常处理器

2. 新增员工 2.1 需求分析 后台系统中可以管理员工信息,通过新增员工来添加后台系统用户。点击[添加员工]按钮跳转到新增页面,如下 当填写完表单信息, 点击"保存"按钮后, 会提交该表单的数据到服务端, 在服务端中需要接受数据, 然后将数据保…

spring aop实现原理_Spring 异步实现原理与实战分享

最近因为全链路压测项目需要对用户自定义线程池 Bean 进行适配工作,我们知道全链路压测的核心思想是对流量压测进行标记,因此我们需要给压测的流量请求进行打标,并在链路中进行传递,那么问题来了,如果项目中使用了多线…

基于Springboot外卖系统07:员工分页查询+ 分页插件配置+分页代码实现

1. 员工分页查询 1.1 需求分析 在分页查询页面中, 以分页的方式来展示列表数据,以及查询条件 "员工姓名"。 请求参数 搜索条件: 员工姓名(模糊查询) 分页条件: 每页展示条数 , 页码 响应数据 总记录数 结果列表 1…

1045-Access denied for user 'root'@'localhost'(using password:YES)

解决: 1. 开始 --> cmd --> net stop mysql (停用MySQL服务 没启动的可以省略) 2. 找到安装路径 MySQL Server 5.1下的my.ini 3. 打开 my.ini 找到 [mysqld] 然后在下面加上 这句: skip_grant_tables (意思好像是 启动MySQL服务…

arial字体可以商用吗_【工作总结】莫让字体版权引火上身

前段一条微软雅黑字体引发的巨额罚款新闻,引起国内多个TW大群小地震,人人自危。我也赶紧检查自家文档、商用出版物、网站的字体,以免给公司带来法务后患。把这两天收集的信息,采取的行动记录一下。哪些中文字体免费?事…

基于Springboot外卖系统08:员工账号状态管理功能+对象转换器+扩展Spring mvc的消息转换器

1. 员工账号状态管理 1.1 需求分析 在员工管理列表页面,可以对某个员工账号进行启用或者禁用操作。账号禁用的员工不能登录系统,启用后的员工可以正常登录。如果某个员工账号状态为正常,则按钮显示为 "禁用",如果员工…

基于Springboot外卖系统09:员工信息编辑+员工信息保存

1 编辑员工信息功能 1.1 需求分析 在员工管理列表页面点击 "编辑" 按钮,跳转到编辑页面,在编辑页面回显员工信息并进行修改,最后点击 "保存" 按钮完成编辑操作。 那么从上述的分析中,当前实现的编辑功能需…

bcp 不能调用where 子句_MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!

不知道从什么时候开始,网上流传着这么一个说法:MySQL的WHERE子句中包含 IS NULL、IS NOT NULL、! 这些条件时便不能使用索引查询,只能使用全表扫描。这种说法愈演愈烈,甚至被很多同学奉为真理。咱啥话也不说,举个例子。…

基于Springboot外卖系统10:公共字段填充功能+ThreadLocal模块改进

1. 公共字段自动填充 1.1 问题分析 在新增员工时需要设置创建时间、创建人、修改时间、修改人等字段,在编辑员工时需要设置修改时间、修改人等字段。这些字段属于公共字段,也就是也就是在系统中很多表中都会有这些字段,如下: 而…

腾讯云挂在和格式化数据盘

新购买了数据盘时,需要格式化才可使用。未购买数据盘的用户可以跳过此步骤。也可以根据需要进行多分区操作。 这里以Windows 2012R2为例进行格式化说明。 1) 通过步骤四介绍的方法登录Windows云服务器。 2) 点击【开始】(Start)-【服务器管理…

基于Springboot外卖系统11:菜品新增类别+类别信息分页查询

1. 新增分类 1.1 需求分析 后台系统中可以管理分类信息,分类包括两种类型,分别是 菜品分类 和 套餐分类 。当我们在后台系统中添加菜品时需要选择一个菜品分类,在后台系统中添加一个套餐时需要选择一个套餐分类,在移动端也会按照…

基于Springboot外卖系统12:删除菜品套餐类别+修改套餐类别信息

1. 删除分类 1.1 需求分析 在分类管理列表页面,可以对某个分类进行删除操作。需要注意的是当分类关联了菜品或者套餐时,此分类不允许删除。 1.2 前端页面分析 在前端页面中,点击 "删除" 按钮,就会触发定义的方法&…

html5手机移动端三级联动城市选择器

//我的地址 var area1 new LArea(); area1.init({ trigger: #demo1, //触发选择控件的文本框,同时选择完毕后name属性输出到该位置 valueTo: #value1, //选择完毕后id属性输出到该位置 keys: { id: id, name: name }, //绑定数据源相关字段 id对应valueTo的value属…

我的师傅是风清扬

1 珍惜那些处处帮助你的人 国庆假期就要过去了,国庆这几天一直在考虑一个问题(先保留是什么问题),也咨询了几个比较信任的朋友,都没有得到肯定的答案。 回家路上跟了一个大哥哥(陈哥)&#xf…

要多大内存才满足_佛龛的尺寸要多大?

佛龛是用于供奉佛像或者牌位的小阁子,大多数是木制家具。佛龛在一般是仿中国古代的房子等工程建筑制做而成,在其纹样层面有很高的要求,有关纹样今日姑且先不谈。除此之外佛龛的尺寸大小多少才算吉祥也是很有讲究的,那麼这个问题跟…

【YOLOV5-6.x讲解】数据配置文件 data/XXX.yaml

主干目录: 【YOLOV5-6.x 版本讲解】整体项目代码注释导航现在YOLOV5已经更新到6.X版本,现在网上很多还停留在5.X的源码注释上,因此特开一贴传承开源精神!5.X版本的可以看其他大佬的帖子本文章主要从6.X版本出发,主要解…

python print 输出到txt_(Python基础教程之七)Python字符串操作

Python基础教程在SublimeEditor中配置Python环境Python代码中添加注释Python中的变量的使用Python中的数据类型Python中的关键字Python字符串操作Python中的list操作Python中的Tuple操作Pythonmax()和min()–在列表或数组中查找最大值和最小值Python找到最大的N个(前N个)或最小…

【YOLOV5-6.x讲解】常用工具类 models/common.py

主干目录: 【YOLOV5-6.x 版本讲解】整体项目代码注释导航现在YOLOV5已经更新到6.X版本,现在网上很多还停留在5.X的源码注释上,因此特开一贴传承开源精神!5.X版本的可以看其他大佬的帖子本文章主要从6.X版本出发,主要解…