架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11601|回复: 2

[资料] 【实战】Spring Boot 之 AOP 动态修改请求参数值

[复制链接]
发表于 2021-11-6 12:15:55 | 显示全部楼层 |阅读模式
需求:项目需要动态修改请求参数,要根据当前用户的权限给请求参数赋值,在参数进入 Controller 控制器方法之前,就要完成对请求参数的修改,控制器调用 service 层的时候,可以通过请求参数作为条件查询和修改数据。请求参数分为两种情况:

  • 对于权限高的用户,可以采用实际请求的参数值
  • 对于只有部分权限的人,根据当前用户绑定的信息动态修改请求参数值


一开始想通过 Filter 过滤器来实现,但是需要将请求内容序列化和反序列化,过于麻烦,还要加很多逻辑判断,还有性能上面的损耗。还好 Spring 提供了 AOP 面向切面功能,可以通过简单的代码,就能实现我们的需求。

首先 maven 项目 pom.xml 需要引入 spring-boot-starter-aop 包,如下:

引入该包后,我们就可以使用 AOP 功能,通过 @Aspect 注解来实现。

Aspect 支持 5 种类型的通知注解:

@Before: 前置通知, 在方法执行之前执行

@After: 后置通知, 在方法执行之后执行

@AfterRunning: 返回通知, 在方法返回结果之后执行

@AfterThrowing: 异常通知, 在方法抛出异常之后

@Around: 环绕通知, 围绕着方法执行

新建 Request.java 泛型请求包装类:

新建 UserInfo.java 请求具体数据类:

新建 ControllerInterceptor 通过 AOP 实现对控制器方法的拦截,如果当前请求头存在 appid,则修改请求参数 appId 的值,否则,不修改请求参数,代码如下:

新建 HomeController 控制器,添加一个请求参数含有 Request<UserInfo> 的接口,代码如下:

测试在没有 appid 请求头的情况,请求参数 appId 是实际值,没有被修改,如下图:

QQ截图20211106121112.jpg

尝试添加 appid 请求头,可以发现 appId 请求参数已经被修改成功,如下图:

aop.gif

最后,附上源码:https://down.itsvse.com/item/lawzja.html





上一篇:使用 iPerf3 测试设备网络通信速度
下一篇:VMware ESXi 上安装 iDRAC 服务模块软件
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2021-11-6 12:21:32 | 显示全部楼层
在 Spring AOP 中业务逻辑仅仅只关注业务本身,将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2023-3-15 11:11:04 | 显示全部楼层
zsdfghjkvbjnm
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-27 08:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表