Advisor 被重复代理问题排查

问题场景

项目中存在多个 AbstractAdvisorAutoProxyCreator 且其持有的 Advisor Bean 重复

问题复现

  • 相关代码
	@ResponseBody@RequiresPermissions(PermissionConstant.****)@GetMapping(value = "/query****.json", name = "")public List<***> query****() {return common*Service.query***().stream().distinct().collect(Collectors.toList());}@Override@Transactional // Transactional 是后来又添加的@Cacheable(cacheNames = "default", key="'**'")public List<***> query***() {// ...}

​ 其被 Shiro 注解RequiresPermissionsWebLogAspect#befareApiController 前置建议所拦截,并且其内部调用了使用 @Cacheable 的方法。

  • 重复代理堆栈截图以及重复带来的影响

在这里插入图片描述

AopAllianceAnnotationsAuthorizingMethodInterceptor(AuthorizingMethodInterceptor) 被重复执行会使,标注了org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor#AUTHZ_ANNOTATION_CLASSES 集合内的注解的Handler 重复鉴权。

在这里插入图片描述

TransactionInterceptor 被重复执行

在这里插入图片描述

CacheInterceptor 的重复执行 会是项目的缓存方法在未命中缓存的场景下缓存两次同样的内容。项目中目前使用 RedisCacheManager 则会发送两次命令。

  • 排查重复代理的思路

​ 项目中都是使用自动代理的方式使代理类生效。可以断点调试 AbstractAdvisorAutoProxyCreatorfindEligibleAdvisors 方法,并设置条件 beanName.equals("${beanName}") beanName:settlementController可以替换成其他的。可发现在创建 settlementController 的时候被代理了两次。 分别是 DefaultAdvisorAutoProxyCreatorAnnotationAwareAspectJAutoProxyCreator

在这里插入图片描述

解决重复代理

AnnotationAwareAspectJAutoProxyCreator 通过注解方式开启是通过 @EnableAspectJAutoProxy , 此类会添加一些Bean定义(beanDefinition)

DefaultAdvisorAutoProxyCreator 大部分框架中并未使用。可能是项目中 添加的工厂方法使其生效了

	@Beanpublic DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator();// ...return creator;}

那么我们则可以利用 SpringBoot 的 @Conditional 相关注解标注工厂方法,例如当项目中存在了 AnnotationAwareAspectJAutoProxyCreator 我们就不用 DefaultAdvisorAutoProxyCreator

	@Bean@ConditionalOnMissingBean(AnnotationAwareAspectJAutoProxyCreator.class)public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator()...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP(GRE MGRE)DSVPN等综合实验

要求&#xff1a; 1、r5为isp&#xff0c;只能进行ip地址的配置&#xff0c;其所有ip地址均为共有ip地址 2、r1和r5使用ppp的PAP认证&#xff0c;r5为主认证方 r2和r5之间使用ppp的chap认证&#xff0c;r5为主认证方 r3和r5之间使用HDLC封装 3、r1 r2 r3构建一个MGRE环境…

Ruoyi-Cloud-Plus_使用Docker部署分布式微服务系统---SpringCloud工作笔记200

1.首先安装docker: 如果以前安装过首先执行: yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine 去卸载docker 2.安装dokcer需要的工具包…

【CASS精品教程】CASS添加标准图幅(50×50cm+50×40cm)

大比例尺地形图图幅一般分为正方形和矩形分幅两种,本文讲解CASS中添加标准图幅(5050cm、5040cm)的方法。 文章目录 一、CASS参数配置二、添加标准图幅(5050cm)三、添加标准图幅(5040cm)打开基于CASS自带案例数据study.dat绘制好的地形图study.dwg,如下图所示,下面来演示两种…

Numpy 初体验

文章目录 第1关&#xff1a;Numpy 创建数组第2关&#xff1a;Numpy 数组的基本运算第3关&#xff1a;Numpy 数组的切片与索引第4关&#xff1a;Numpy 数组的堆叠第5关&#xff1a;Numpy 的拆分 第1关&#xff1a;Numpy 创建数组 编程要求 本关的任务是&#xff0c;补全右侧编辑…

MySQL的主从复制和读写分离

目录 一、MySQL的主从复制 1、MySQL主从复制的原理 1.1 MySQL的复制类型 1.2 MySQL主从复制的工作过程 1.3 MySQL主从复制延迟 1.3.1 原因 1.3.2 解决方案 2、搭建MySQL的主从复制 实验环境 实验前提 ①Mysql主从服务器时间同步 ②主服务器的mysql配置 ③从服务器的…

Linux下javaweb项目部署

javaweb项目部署测试 测试环境&#xff1a;centos7 下载安装jdk rpm -ivh jdk-8u131-linux-x64.rpm 下载安装MySQL wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-server-5.7.33-1.el7.x86_64.rpm https://downloads.mysql.com/archives/get/p…

AI预测福彩3D第19弹【2024年3月27日预测--第5套算法开始计算第1次测试】

今天早上&#xff0c;突然做了一个大胆的决定&#xff0c;直接用新的算法来搞4码定位&#xff0c;新的算法融合了冷温热的趋势分析&#xff0c;让我自己搭建的AI深度学习模型来预测相关号码的冷温热走势&#xff0c;并赋予相关权重&#xff0c;然后通过权重来进行打分排名。当然…

9.HelloWorld案例常见问题

文章目录 一、BUG二、BUG的解决三、HelloWorld常见问题 一、BUG BUG&#xff08;小甲虫&#xff09;。计算机刚开始出现的时候&#xff0c;因为体积比较大&#xff0c;一些小虫子很容易转进去。有一天有一只蟑螂钻到了计算机当中&#xff0c;从而导致计算机不能正常运行&#…

vue3服务端渲染警告解决----DefinePlugin

Bundler 构建功能标志 有关 vuejs.org 的详细参考 esm-bundlerVue 的构建公开了可以在编译时覆盖的全局特性标志&#xff1a; __VUE_OPTIONS_API__ 违约&#xff1a;true启用/禁用选项 API 支持 __VUE_PROD_DEVTOOLS__ 违约&#xff1a;false在生产环境中启用/禁用 devtools 支…

2024/3/27打卡更小的数(十四届蓝桥杯)——区间DP

目录 题目 思路 代码 题目 思路 题目说求数组某个区间中的数进行翻转&#xff0c;由于区间选择多&#xff0c;首先想到DP问题。 第一版想到的方法&#xff08;错误的&#xff09;&#xff0c;当进行状态计算的时候&#xff0c;无法判定区间是否翻转后满足要求&#xff0c;…

c++|string模拟实现

目录 一、string.h 二、string.cpp 三、Test.cpp 对string的各种接口进行一个简易版的模拟实现&#xff0c;在模拟实现完之后对string的底层实现有了进一步的理解&#xff0c;了解大佬的编程写法思路。也算是对string有了一个小总结。 一、string.h 接口的声明。放在.h文件中…

MySQL安装和配置(超详细)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 欢迎&#x1f64f;点赞&#x1f5e3;️评论&#x1f4e5;收藏&#x1f493;关注 &#x1f496;衷心的希…

武汉星起航公司助力零经验新手卖家征战亚马逊跨境电商市场

在数字化浪潮的推动下&#xff0c;亚马逊跨境电商行业正逐渐成为众多创业者和企业家们的新战场。然而&#xff0c;对于零经验的新手卖家而言&#xff0c;这片广袤的电商海洋无疑充满了未知与挑战。在这个关键时刻&#xff0c;武汉星起航公司以其专业的服务和深厚的行业积累&…

day 36 贪心算法 part05● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

一遍过。首先把区间按左端点排序&#xff0c;然后右端点有两种情况。 假设是a区间&#xff0c;b区间。。。这样排列的顺序&#xff0c;那么 假设a[1]>b[0],如果a[1]>b[1]&#xff0c;就应该以b[1]为准&#xff0c;否则以a[1]为准。 class Solution { public:static bo…

老阳分享:视频号带货怎么做?有哪些方法?

在数字化浪潮中&#xff0c;视频号带货成为了一种新兴的商业模式&#xff0c;它结合了视频内容的吸引力和电商销售的便捷性&#xff0c;为品牌和商家带来了无限商机。那么&#xff0c;视频号带货究竟应该怎么做?又有哪些有效的方法呢? 首先&#xff0c;视频号带货的核心在于内…

行为管理设置能监控或者检测哪些东西

3 月 27 日&#xff0c;国新办举行“推动高质量发展”系列主题新闻发布会&#xff0c;浙江省省长王浩&#xff1a;全省市场经营主体 1040 万户&#xff0c;相当于平均每 6.5 个浙江人就有 1 个老板。 不由让小编想到&#xff0c;这么多老板&#xff0c;那么老板创办企业也怪不容…

【JavaEE】初识线程,线程与进程的区别

文章目录 ✍线程是什么&#xff1f;✍线程和进程的区别✍线程的创建1.继承 Thread 类2.实现Runnable接口3.匿名内部类4.匿名内部类创建 Runnable ⼦类对象5.lambda 表达式创建 Runnable ⼦类对象 ✍线程是什么&#xff1f; ⼀个线程就是⼀个 “执行流”. 每个线程之间都可以按…

大数据开发(离线实时音乐数仓)

大数据开发&#xff08;离线实时音乐数仓&#xff09; 一、数据库与ER建模1、数据库三范式2、ER实体关系模型 二、数据仓库与维度建模1、数据仓库&#xff08;Data Warehouse、DW、DWH&#xff09;1、关系型数据库很难将这些数据转换成企业真正需要的决策信息&#xff0c;原因如…

【快速解决】解决谷歌自动更新的问题,禁止谷歌自动更新,如何防止chrome自动升级 chrome浏览器禁止自动升级设置方法

目录 问题描述 解决方法 1、搜索栏搜索控制面板 2、搜索&#xff1a;服务 ​编辑 3、点击Windows工具 4、点击服务 ​5、禁止谷歌更新 问题描述 由于我现在需要装一个谷歌的驱动系统&#xff0c;但是目前的谷歌驱动系统的版本都太旧了&#xff0c;谷歌自身的版本又太新了…

上海:6月1日起取消企业复工复产白名单制

财经新闻5月29日消息&#xff1a;上海市人民政府关于印发《上海市加快经济恢复振兴行动计划》的通知。 《方案》包括千方百计缓解各类市场主体困难&#xff0c;全面有序推进复工复产和市场复工复产&#xff0c;多措并举稳外资稳外贸&#xff0c;大力促进消费加速复苏&#xff0…