第二十三节:学习拦截器或者使用AOP实现用户token参数请求检测(自学Spring boot 3.x的第六天)

news/2024/12/21 14:39:35/

这节记录下如何使用aop或者使用interceptor实现用户请求的是否带token,本文只是简单检查用户请求是否带参数token,并不对token的正确性进行验证。通常要从后台缓存中进行token校验。

第一种方式:拦截器方式

第一步:新建一个拦截器package,名称为interceptor,新建一个拦截器。

java">@Component
public class TokenInterceptor implements HandlerInterceptor {Logger logger = LoggerFactory.getLogger(TokenInterceptor.class);@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {logger.info("preHandle执行中");String token  = request.getHeader("token");if(StringUtils.isBlank(token)){throw new BussinessException("无token,参数错误");}if(!token.equals("ceshi")){throw new BussinessException("token参数错误");};return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {logger.info("postHandle执行中");HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {logger.info("afterCompletion执行中");HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}

第二步:在WebMvcConfigurer配置类中注册拦截器

java">@Overridepublic void addInterceptors(InterceptorRegistry registry) {WebMvcConfigurer.super.addInterceptors(registry);registry.addInterceptor(tokenInterceptor);//默认所有的url拦截}

第二种方式:使用AOP

编写一个aop类,添加上注解@Aspect和@Component。重写下面的方法

java">@Aspect
@Component
public class LoggerAspect {private static final Logger logger = LoggerFactory.getLogger(LoggerAspect.class);@Pointcut("execution(* cn.wcyf.wcai.controller.front.*.*(..))") // 定义切点public void pointcut() {}@Before("pointcut()")public void before() {logger.info("before方法中: ");}@After("pointcut()")public void after() {logger.info("after方法中: " );}@AfterReturning("pointcut()")public void afterReturn() {logger.info("AfterReturning方法中: " );}@AfterThrowing("pointcut()")public void threw() {logger.info("AfterThrowing方法中: " );}@Around("pointcut()")public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {logger.info("Around方法开始: " + proceedingJoinPoint.getSignature());try {ServletRequestAttributes attrs  = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if(attrs!=null){HttpServletRequest request =  attrs.getRequest();String token = request.getHeader("token");if(StringUtils.isBlank(token)){throw new BussinessException("参数错误,token为空");}if(!token.equals("ceshi")){throw new BussinessException("token错误,这是aop测试");}}Object result = proceedingJoinPoint.proceed(); // 调用目标方法logger.info("Around方法结束: " + proceedingJoinPoint.getSignature() + ", 返回值: " + result);return result;} catch (Throwable ex) {logger.info("Around方法捕获异常: " + proceedingJoinPoint.getSignature() + ", 异常: " + ex.getMessage());throw ex; // 重新抛出异常,以便Spring可以正确处理}}
}

Object result = proceedingJoinPoint.proceed(); // 调用目标方法

这个代码可以执行调用目标方法,在这段代码前面可以实现前置通知,在这段代码后可以实现后置通知。


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

相关文章

论文翻译 | LLaMA-Adapter :具有零初始化注意的语言模型的有效微调

摘要 我们提出了一种轻量级的自适应方法,可以有效地将LLaMA微调为指令遵循模型。lama - adapter采用52K自指导演示,在冻结的LLaMA 7B模型上只引入1.2M可学习参数,在8个A100 gpu上进行微调花费不到一个小时。具体来说,我们采用了一…

Windows 环境上安装 NASM 和 YASM 教程

NASM 和 YASM NASM NASM(Netwide Assembler)是一个开源的、可移植的汇编器,它支持多种平台和操作系统。它可以用来编写16位、32位以及64位的代码,并且支持多种输出格式,包括ELF、COFF、OMF、a.out、Mach-O等。NASM使用…

linux和windows系统使用k8s控制节点的kubernetes资源

一般linux获取master控制节点的授权: [rootharbor ~]# vim /etc/hosts 192.168.1.30 harbor 192.168.1.50 master 192.168.1.51 node-0001 192.168.1.52 node-0002 192.168.1.53 node-0003 192.168.1.54 node-0004 192.168.1.55 node-0005#下…

Linux之Docker虚拟化部署

上传docker安装包 解压安装包 将解压后的docker文件夹移动到/usr/local/文件夹下 docker 启动命令/usr/local/docker/dockerd 但是启动报错,意思是没有docker用户组 创建docker用户组,执行完会生成套接字文件 将套接字文件加入该用户组管理 第二个错误原…

【Linux】进程概念-2

文章目录 1.环境变量1.1 基本概念1.2 常见环境变量1.3 查看环境变量方法1.4 测试PATH1.5 测试HOME1.6 和环境变量相关的命令1.7 环境变量的组织方式1.8 通过代码如何获取环境变量1.9 通过系统调用获取或设置环境变量1.10 环境变量通常是具有全局属性的1.11 实验 2. 程序地址空间…

HarmonyOS Next应用开发——响应式布局之媒体查询

响应式布局之媒体查询 媒体查询作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式,常用于多屏幕的应用适配。媒体查询常用于下面两种场景: 针对设备和应用的属性信息(…

Poetry进行python项目创建和管理

Poetry 是一个用于依赖管理和打包的工具,它让创建和管理 Python 项目变得更加简单。以下是如何使用 Poetry 创建和管理 Python 项目的步骤。 安装 Poetry 首先,你需要安装 Poetry。你可以使用官方提供的安装脚本来安装 Poetry: curl -sSL …

Excel提取数据

Excel提取数据 在使用Excel的过程中,我需要将带有评语的评分的文本内容提取出评分,如下所示 其中分数与文本之间用空格分隔,只有分数的评语会自动靠右对齐,我需要做的就是将B列的评语从中提取出分数放到C列中,以下为实…