|
需求:项目需要动态修改请求参数,要根据当前用户的权限给请求参数赋值,在参数进入 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 是实际值,没有被修改,如下图:
尝试添加 appid 请求头,可以发现 appId 请求参数已经被修改成功,如下图:
最后,附上源码:https://down.itsvse.com/item/lawzja.html
|
上一篇:使用 iPerf3 测试设备网络通信速度下一篇:VMware ESXi 上安装 iDRAC 服务模块软件
|