【2024-03-14】Spring中基于注解和AOP的结合实现(改造系统中的原有AOP鉴权)

业务需求

改造系统中的原先写的通过表达式拦截实现的鉴权功能。

原有逻辑

没有注释(啊啊啊啊)。
花费工时7.5小时。

步骤如下:

  1. 获取Header头参数。
  2. 校验Header头的必要参数。
  3. 通过Header中获取的参数,查询数据库入口表信息。
  4. 通过Header中获取的参数,尝试进行验签

实现过程

前期分析

由于需要打印前后日志,所有使用环绕通知实现,又需要基于注解可能要给其他服务使用,使用注解比表达式更灵活。

难点1

由于要前后打印日志,但是接口时通过POST方式接收,涉及到读取Body数据,可Web中的Body只能读取一次,故这是个问题点。
解决方案
SpringMVC中也会涉及到重复读写Body的情况,可以查看Spring中是否已经实现,果然ContentCachingRequestWrapper这个类解决了我们的难题。

难点2

如何把包装后的Request放回去让,Spring其他功能继续处理呢。
解决方案:还是考虑SpringMVC中是否有实现,RequestContextHolder类中**RequestContextHolder.setRequestAttributes();**方法解决这个问题。通过测试可行。

难点3

第3步,要访问数据库获取入口信息,如果以公用模块的方式提供其他服务使用,需要提供灵活的方法。
解决方案:采用桥接模式,实现与抽象分离,让代码变的灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值