From 0cebda370ad364a4ef6eeaa9e3da8208b2ed8110 Mon Sep 17 00:00:00 2001 From: stylefeng Date: Wed, 4 Dec 2024 19:50:53 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.3.3=E3=80=91=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=B8=80=E4=B8=AAaop=E4=BB=A3=E7=90=86=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=B1=BB=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kernel/rule/util/AopTargetUtils.java | 51 ++++--------------- 1 file changed, 10 insertions(+), 41 deletions(-) diff --git a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/util/AopTargetUtils.java b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/util/AopTargetUtils.java index 12b2ba539..505e4995d 100644 --- a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/util/AopTargetUtils.java +++ b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/util/AopTargetUtils.java @@ -1,36 +1,9 @@ -/* - * Copyright [2020-2030] [https://www.stylefeng.cn] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: - * - * 1.请不要删除和修改根目录下的LICENSE文件。 - * 2.请不要删除和修改Guns源码头部的版权声明。 - * 3.请保留源码和相关描述文件的项目出处,作者声明等。 - * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns - * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns - * 6.若您的项目无法满足以上几点,可申请商业授权 - */ package cn.stylefeng.roses.kernel.rule.util; import lombok.extern.slf4j.Slf4j; -import org.springframework.aop.framework.AdvisedSupport; -import org.springframework.aop.framework.AopProxy; +import org.springframework.aop.framework.Advised; import org.springframework.aop.support.AopUtils; -import java.lang.reflect.Field; - /** * 获取代理原始对象的工具 * @@ -73,12 +46,10 @@ public class AopTargetUtils { * @since 2020/10/19 16:21 */ private static Object getCglibProxyTargetObject(Object proxy) throws Exception { - Field h = proxy.getClass().getDeclaredField("CGLIB$CALLBACK_0"); - h.setAccessible(true); - Object dynamicAdvisedInterceptor = h.get(proxy); - Field advised = dynamicAdvisedInterceptor.getClass().getDeclaredField("advised"); - advised.setAccessible(true); - return ((AdvisedSupport) advised.get(dynamicAdvisedInterceptor)).getTargetSource().getTarget(); + if (proxy instanceof Advised advised) { + return advised.getTargetSource().getTarget(); + } + throw new IllegalArgumentException("Not a CGLIB proxy"); } /** @@ -88,12 +59,10 @@ public class AopTargetUtils { * @since 2020/10/19 16:22 */ private static Object getJdkDynamicProxyTargetObject(Object proxy) throws Exception { - Field h = proxy.getClass().getSuperclass().getDeclaredField("h"); - h.setAccessible(true); - AopProxy aopProxy = (AopProxy) h.get(proxy); - Field advised = aopProxy.getClass().getDeclaredField("advised"); - advised.setAccessible(true); - return ((AdvisedSupport) advised.get(aopProxy)).getTargetSource().getTarget(); + if (proxy instanceof Advised advised) { + return advised.getTargetSource().getTarget(); + } + throw new IllegalArgumentException("Not a JDK dynamic proxy"); } -} \ No newline at end of file +} \ No newline at end of file