【Javaweb】【瑞吉外卖】登录功能plus--拦截器filterinterceptors实现

上手第二天,做到登录拦截器部分

需求:完成目标是,只有在登录的情况下才想让其访问后端,没有登录禁止访问,并且让其跳转。
这里有一个比较好的思想是:后端程序要主要需要考虑的是拦截接口,不能让数据接口能够让没有未被登录的用户进行访问,而前端页面不用去管,交给前端程序员去操作
[前端dalao:我TM蟹蟹你啊哈哈哈^_^]。

解决方式:

第一种方法,按照黑马的方式,添加filter

所需要的大概过程:

  1. 编写类,需要实现servlet下的filter接口
  2. 需要重写doFilter方法。
  3. 方法内写逻辑
  4. 代码里面细说
@Slf4j
//spring注入编写的注解
// 第一个参数名字而已,随便,第二个参数表示需要拦截的url
@WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*")
public class LoginCheckFilter implements Filter {// 这个用来进行检测通配符的private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();/*** 需要重写的doFilter方法* @param servletRequest    本次访问的req请求* @param servletResponse   本次需要会送的res* @param filterChain       这个好像就是传送给下一个filter的内容* @throws IOException* @throws ServletException*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// 首先需要强转一下HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;log.info("拦截到请求:{}", request.getRequestURI());// filterChain.doFilter(request, response);// 1. 获取本次req的URIString uri = request.getRequestURI();// 直接放行的接口String[] strs = new String[]{"/employee/login","/employee/logout","/backend/**","/front/**"};// 2. 判断本次是否需要处理if (checkUri(strs, uri)){// 这么写就表示这一层filter通过,再交给下一个filter进行检验// 如果都没有了就正常访问controller// 也只是我这么猜的filterChain.doFilter(request, response);return;}// 3. 如果不需要处理直接放行// 4. 判断是否已经登录,如果登录放行if (request.getSession().getAttribute("employee") != null) {filterChain.doFilter(request, response);return;}// 5. 未登录拦截,并且返回信号response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));}private boolean checkUri(String[] urls, String reqUri){for (String url : urls) {// 因为url有用到通配符,需要用这个match匹配一下// 满足true,反之falseif (PATH_MATCHER.match(url, reqUri))return true;}return false;}
}

第二种方法,编写interceptor类进行拦截

弹幕大神里面说拦截器方法没几行的事,所以我就深入学习一下。
主要参考(chao xi)的博客: https://blog.csdn.net/Herishwater/article/details/103544342

这位dalao写的很详细,插眼瞅瞅。

主要写如何实现拦截器功能,功能强大,看楼上这个大佬的解析。

实现步骤:

  1. 编写Interceptor类,实现HandlerInterceptor这个接口
  2. 重写里面三个方法,因为实现拦截器,主要关注的是preHandle这个方法
  3. 其他两个可以暂时不用管
  4. 去config类里面重写一个addInterceptors
  5. 注册一下刚刚写的类,并且添加一下拦截路径就行

目前可以察觉到明显的好处:

  1. req, res不需要强转
  2. 添加的pattern可以直接用通配符,直接疯狂add就行,不需要自己写if
  3. 功能更强大,主要看另外两个方法
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {/*** 这个类是在处理controller之前执行的,实行时间有点类似于filter* @param request       参数也比较类似,但这两个都是httpServlet,所以不用强转* @param response* @param handler* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info("拦截到请求: {}", request.getRequestURI());return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}// config类下面重写这个方法,注册一下刚刚写的interceptor@Overrideprotected void addInterceptors(InterceptorRegistry registry) {// 注册// 并且添加一下需要拦截的路径,这里可以直接用通配符,不需要进行额外检测// 这里一个*代表当前目录下所有文件但非递归,两个**代表递归registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/backend/**");}

还有弹幕大佬说用jwt做,到时候看看(挖个坑)

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

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

相关文章

理德外汇:欧银连续四次维持利率欧元短线下挫20点

欧洲央行连续第四次维持三大利率不变,符合市场预期。决议公布后,欧元(1.0948, 0.0000, 0.00%)兑美元EUR/USD短线下挫20点,最低至1.0874。 欧洲央行表示,通胀已进一步下降。预计2024年通胀率为2.3%,去年12月预期为2.7%。…

FPGA AXI4总线信号介绍篇

一.AXI总线类型接口 AXI是一种总线协议,可以挂在多个master和slave: (1)AXI4:主要面向高性能地址映射通信的需求;(突发数据)(地址映射模式) &#x…

快试试用 API Key 来保护你的 SpringBoot 接口安全吧

目录 1、概述 2、REST API Security 3、用API Keys保护REST API 4. 测试 1、概述 安全性在REST API开发中扮演着重要的角色。一个不安全的REST API可以直接访问到后台系统中的敏感数据。因此,企业组织需要关注API安全性。 Spring Security 提供了各种机制来保护我们的 REST A…

『python爬虫』requests实战-comicai绘画ai通过cookie签到(保姆级图文)

目录 实现效果实现思路登录查询积分数量签到 实现代码总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 实现效果 实现思路 登录 f12 打开控制台,进入网络清除所有信息后点击登录按钮 通过搜索login(通用写法)…

用云手机进行舆情监测有什么作用?

在信息爆炸的时代,舆情监测成为企业和政府决策的重要工具。通过结合云手机技术,舆情监测系统在品牌形象维护、市场竞争、产品研发、政府管理以及市场营销等方面发挥着关键作用,为用户提供更智能、高效的舆情解决方案。 1. 品牌形象维护与危机…

【动态规划基础与刷题】

注意 自行复制链接去进行刷题&#xff0c;因为平台的跳转功能太差。 https://www.acwing.com/problem/content/823/ https://www.acwing.com/solution/content/135651/ f1 普通的递归 #include <bits/stdc.h> // 2024-03-04 Come on ! using namespace std; #de…

F1-score模型评估

什么是F1-score F1-score 是一种用于衡量分类模型性能的指标&#xff0c;它综合了精确度&#xff08;Precision&#xff09;和召回率&#xff08;Recall&#xff09;两个指标。F1-score 的值在 0 和 1 之间&#xff0c;值越接近 1&#xff0c;表示模型的性能越好。在文本分类任…

虚拟机部署elasticsearch集群

1.先决条件 使用三台服务器 centos7 ip:hosts192.168.75.101elk101192.168.75.102elk102192.168.75.103elk103 这里使用的是elasticsearch7.17版本 三台机器全部关闭防火墙 systemctl disable --now firewalld && systemctl is-enabled firewalld systemctl status…

Vue.js+SpringBoot开发农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

Android Selinux详解[二]--新增文件标签相关

目录 file_contexts新增标签 在file_contexts中新增标签的验证方式 在file_contexts中新增节点标签可能会遇到的问题 在file.te中一些常用的声明类型解释 在工作过程中&#xff0c;SElinux常用的有以下几个文件可用于新增标签 可用于加标签的文件名含义对应的声明文件名(一…

用科技打造优质内容,柠檬微趣荣获“首都文明单位”称号

近日&#xff0c;北京召开了首都精神文明建设工作大会&#xff0c;会上宣读了首都精神文明建设先进评选结果。首都文明委决定授予951家单位“首都文明单位”称号。北京市公安局西城分局、中国印刷有限公司、北京柠檬微趣科技股份有限公司等61家西城区单位获此殊荣。 据了解&am…

测试一下 Anthropic 宣称超过 GPT-4 的 Claude 3 Opus

测试一下 Anthropic 宣称超过 GPT-4 的 Claude 3 Opus 0. 引言1. 测试 Claude 3 Opus 0. 引言 今天测试一下 Anthropic 发布的 Claude 3 Opus。 3月4日&#xff0c;Anthropic 宣布推出 Claude 3 型号系列&#xff0c;该系列在广泛的认知任务中树立了新的行业基准。该系列包括…

【GoEnhance AI】高质量视频转动画,无卡顿——登录和使用:详细指南!

GoEnhance 关于GoEnhance登录GoEnhance1. 从Web浏览器访问GoEnhance2. 点击“Log in”。3. 选择登录方式4. 登录成功 使用GoEnhance1. 视频转动画1.1 上传想要转换的视频1.2 设置参数1.3 点击“GENERATE”生成视频1.4 结果查看和视频下载 2. 进行图像增强和升级2.1 上传图片2.2…

hash函数

在计算机科学中&#xff0c;hash&#xff08;哈希&#xff09;是一种将任意大小的数据映射到固定大小值&#xff08;通常较小&#xff09;的函数。哈希函数将输入数据转化为一串固定长度的字符串&#xff0c;这串字符通常被称为哈希码、哈希值或简称哈希。哈希函数的特点是对于…

QEMU-img工具

简介 QEMU-img是QEMU项目提供的一个强大的磁盘镜像管理工具&#xff0c;用于创建、转换、修改和检查各种磁盘镜像格式。以下是对qemu-img各个参数及示例的详细说明&#xff1a; [rootcloudstack-agent 0742fb48-5c0c-3b74-a207-2be67c07a231]# qemu-img -h基础用法 qemu-img…

『 Linux 』Process Control进程控制(万字)

文章目录 &#x1f996; 前言&#x1f996; fork()函数调用失败原因&#x1f996; 进程终止&#x1f4a5; 进程退出码&#x1f4a5; 进程正常退出 &#x1f996; 进程等待&#x1f4a5; 僵尸进程&#x1f4a5; 如何解决僵尸进程的内存泄漏问题&#x1f4a5; wait( )/waitpid( )…

2024年AI辅助研发趋势:辅助软件开发的新纪元

随着人工智能&#xff08;AI&#xff09;技术的迅速发展&#xff0c;AI在各行各业的应用越来越广泛&#xff0c;其中包括软件开发领域。在2024年&#xff0c;我们正在目睹一场革命&#xff0c;即AI辅助研发的趋势正迅速崛起&#xff0c;为软件开发者带来了前所未有的便利和创新…

简单的base64转pdf

import sun.misc.BASE64Decoder;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths;public class Base64ToPdf {public static void main(String[] args) {// 指定TXT文件和目标PDF…

1748页CTF竞赛入门指南,有点牛!

CTF是一种针对信息安全领域的经济性挑战&#xff0c;旨在通过解决一系列的难题来寻找隐藏的“flag”。CTF比赛战队一般是以高校、科研单位、企业、信息安全从业者或社会团体组成。对于网安爱好者及从业者来说&#xff0c;拥有“CTF参赛经验”也是求职中的加分项。 前几天分享的…

20240308-Day 26-点亮代码技能

卡码网54&#xff08;代码随想录&#xff1a;替换数字&#xff09; C&#xff1a; 注意&#xff1a; 这道题的关键是填充number的方法&#xff0c;如果从前向后填充&#xff0c;那么每次都需要将字符串后面的元素整体向后移动&#xff08;时间复杂度O(n^2)&#xff09;&#x…