Spring 拦截器

news/2024/11/17 3:36:10/

目录

今日良言:心若有所向往,何惧道阻且长

一、Spring 拦截器

1.拦截器简介

2.实现自定义拦截器


今日良言:心若有所向往,何惧道阻且长

一、Spring 拦截器

1.拦截器简介

Spring Boot 拦截器是面向切面编程-----AOP 的具体实现,用于对请求做预处理。

正常情况下的调用顺序:

 当有了拦截器之后,会对用户的请求进行预处理,也就是在Controller之前进行相应的业务处理,如下:

2.实现自定义拦截器

实现一个自定义拦截器主要分为两步:

1).定义拦截器

   创建⾃定义拦截器,实现 HandlerInterceptor 接⼝的 preHandle(执⾏具体⽅法之前的预处理)方法。

代码如下:

/*** 自定义拦截器*/
@Component // 存入spring容器中
public class LoginInterceptor implements HandlerInterceptor {// 调用目标方法之前执行的方法// 此方法返回boolean 类型的值// 如果返回的是true 表示拦截器拦截成功 继续走后面的流程  执行目标方法// 如果返回的是false 表示拦截器拦截失败, 验证不通过,后续的流程和目标方法不要执行了。@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession(false);// 没有就不创建sessionif (session != null && session.getAttribute("user") != null) {return true;}// 设置返回数据格式response.setContentType("application/json;charset=utf8");response.getWriter().println("{\"code\":-1,\"msg\":\"登录失败\",\"data\":\"\"}");return false;}
}

2),配置拦截规则

将⾃定义拦截器加⼊ WebMvcConfigurer 的 addInterceptors ⽅法中。

/*** @author 26568* @date 2023-05-15 20:11*/
@Configuration   // 配置项 
public class MyConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**")   // * 表示拦截一级URL ** 表示拦截所有URL.excludePathPatterns("/user/login")  // 排除url   /user/login 不拦截.excludePathPatterns("/user/reg")    // 排除url  /user/reg    不拦截;}
}

在controller包下创建一个UserController来进行相关操作。

 代码如下:

/*** @author 26568* @date 2023-05-15 20:15*/
@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/login")public String login() {return "login";}@RequestMapping("/reg")public Object register() {return "reg";}@RequestMapping("/index")public Object index() {return "index";}
}

然后启动项目,查看效果:

当访问url 为 127.0.0.1:8080/user/reg 和 127.0.0.1:8080/user/login 时,由于没有拦截,会看到返回结果:

 

 但是此时访问127.0.0.1:8080/user/index 时,会被拦截。

 这里拦截以后返回的结果,就是之前定义拦截器返回的结果。由于这里是简单的代码,并没有session,所以会返回false,但是这里拦截成功了。


http://www.ppmy.cn/news/68902.html

相关文章

第一个Go语言程序

第一个Go语言程序 目录 第一个Go语言程序引言Go的开发环境安装GoPATH编辑器 第一个Go程序总结 引言 本系列博客将手把手带着大家从零基础入门go语言,不定时更新吧,自己学到哪就更新到哪,先讲讲为什么要学习go语言:列出以下几点go…

Linux系统调用函数(300多个)

前言:这里只是给出中文描述,方便浏览熟悉,具体情况建议去具体环境(Linux系统)下执行 1)man 2 systemcalls (查看所有系统调用函数);2)man 2 open &#xff08…

微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

文章目录 1 微服务注册中心1.1 注册中心概念1.1.1 为什么需要注册中心1.1.2 如何实现一个注册中心1.1.3 如何解决负载均衡的问题 1.2 注册中心如何选型1.2.1 Zookeeper1.2.2 Eureka1.2.3 Nacos1.2.4 Consul1.2.5 Kubernetes 1 微服务注册中心 微服务的注册中心目前主流的有以下…

谷歌慌了!想发论文得审批,优先开发产品,让OpenAI没得看

来源 | 机器之心 ID | almosthuman2014 众所周知,谷歌就像人工智能领域的「黄埔军校」,自深度学习兴起后培养出了整整一代机器学习研究人员和工程师。很长一段时间里,谷歌就是领先 AI 技术的代名词。 人们已经习惯跟随谷歌的脚步&#xff0c…

【计网笔记02】计算机网络之数据链路层(封装成帧、差错控制、流量控制、信道访问控制、滑动窗口)

这篇文章,主要介绍计算机网络之数据链路层(封装成帧、差错控制、流量控制、信道访问控制、滑动窗口)。 目录 一、数据链路层 1.1、基本概念 1.2、封装成帧和透明传输 1.3、差错控制

如何通过编程竞赛来掌握C++编程

如何通过编程竞赛来掌握C编程 一、为什么选择编程竞赛作为学习C的方法1 提升编程能力的有效途径2 压力激发潜力,激发学习动力3 增加编程实践机会,锻炼实战技能4 社区交流,收获学习经验5 成果突显,提升自信心 二、如何准备参加编程…

Jetson TX2 GPIO权限设置,Jetson.GPIO提供的99-gpio.rules文件没有效果

文章目录 快速通道背景历程使用udevadm test进行调试 总结参考 快速通道 在此之前得确认1. 用户组gpio是否存在getent group | grep gpio (如果没创建就groupadd -r gpio创建)2. 当前用户是否已经加入gpio用户组groups | grep gpio(如果没加入就usermod -aG gpio 当前用户名加入…

26-2 vue-router

原始的方式好多东西需要我们自己去写,vue-router是一个集成好了的路由包,vue-router 官网 Vue Router | Vue.js 的官方路由 并非原始的东西就不好,只要是包就可能存在版本兼容问题,如果是简单的需求就建议用原始的方法 目录 1 …