当前位置: 首页 > news >正文

管理公司网站的职位wordpress安全更改

管理公司网站的职位,wordpress安全更改,网站建设时程序的作用,县检察院门户网站建设情况使用基于jvm-sandbox的对三层嵌套类型的改造 问题背景 先简单介绍下基于jvm-sandbox的imock工具#xff0c;是Java方法级别的mock#xff0c;操作就是监听指定方法#xff0c;返回指定的mock内容。 jvm-sandbox 利用字节码操作和自定义类加载器的技术#xff0c;将原始方法… 使用基于jvm-sandbox的对三层嵌套类型的改造 问题背景 先简单介绍下基于jvm-sandbox的imock工具是Java方法级别的mock操作就是监听指定方法返回指定的mock内容。 jvm-sandbox 利用字节码操作和自定义类加载器的技术将原始方法替换为模拟代码从而在应用程序中实现方法级别的模拟。这种方法非常强大但也需要对字节码操作、类加载机制和 JVM 内部原理有一定的理解。 公司要搭建一个方法级别的后端mock平台因此我在imock的基础上进行二次开发进行使用。 问题描述 在mock某个三方接口的方法时遇到报错ava.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.travelsky.angeldoe.output.PassengerFlightInfo 看样子是本来应该是JSONObject 无法转化成PassengerFlightInfo类型通过日志排查问题定位到报错代码。 PassengerFlightInfo passengerFlightInfo  JSON.parseObject(out .getPassengerFlightInfoList().get(0).toString(), PassengerFlightInfo.class); 线上服务没有报错测试mock环境报错那么显然是数据的问题通过Arthas追踪方法返回的bean对比发现差异就是线上的PassengerFlightInfo是一个bean测试的PassengerFlightInfo是一个object。差异由此出现。 image-20230810214520907 image-20230810231158842 那么问题的关键就在于如何通过mock工具把object提前转成bean。 解决方案 改造mock agent工具思路通过我们的mock-module.jar实现。 根据PsrInfoOutputBean初步解析returnObject获取list中的object 将object解析成PassengerFlightInfo再通过反射技术将bean反射回PsrInfoOutputBean 代码实现 //针对cki特殊类型PsrInfoOutputBeancase 3:    //获取advice返回类型的类加载器    ClassLoader behaviorClassLoader  advice.getBehavior().getReturnType().getClassLoader();    //加载最外层PsrInfoOutputBean    Class? targetClass  behaviorClassLoader.loadClass(ro.getClassNames()[0]);    LogUtil.info2(targetClass, targetClass.toString());    //根据目标类解析returnData    Object res1  JSON.parseObject(ro.getReturnData(), targetClass);    //赋值保存做对比    Object res0  res1;    LogUtil.info2(res1-before, res1.toString());    // 通过反射获取passengerFlightInfoList    ListObject passengerFlightInfoList  (ListObject) targetClass.getMethod(getPassengerFlightInfoList).invoke(res1);    LogUtil.info2(passengerFlightInfoList, passengerFlightInfoList.toString());    if (!passengerFlightInfoList.isEmpty()) {        // 获取 passengerFlightInfoList 列表中的第一个元素        Object firstPassengerFlightInfoList  passengerFlightInfoList.get(0);        LogUtil.info2(firstPassengerFlightInfoList, firstPassengerFlightInfoList.toString());        // 将 firstFlightInfo 转换成 JSON 字符串        String firstFlightInfoJson  JSON.toJSONString(firstPassengerFlightInfoList);        // 获取第三层额外目标 Bean 类的类名使用同一类加载器        Class? targetBeanClass  behaviorClassLoader.loadClass(ro.getClassNames()[2]);        LogUtil.info2(targetBeanClass, targetBeanClass.toString());        //根据类解析成bean        Object targetBean  JSON.parseObject(firstFlightInfoJson, targetBeanClass);        LogUtil.info2(targetBean, targetBean.toString());        // 创建一个新的passengerFlightInfoListNew 将 targetBean 添加到 passengerFlightInfoList 中        ListObject passengerFlightInfoListNew  new ArrayList();        passengerFlightInfoListNew.add(targetBean);        // 设置 passengerFlightInfoList 属性回 res1        try {            // 执行反射方法,把passengerFlightInfoListNew反射回res            Method method  targetClass.getMethod(setPassengerFlightInfoList, List.class);            method.invoke(res1, passengerFlightInfoListNew);        } catch (Exception e) {            // 捕获异常并打印日志            LogUtil.info2(Error occurred while invoking method:, e.getMessage()e);        }    }    LogUtil.info2(前后的两个类equals吗, String.valueOf(res1.equals(res0)));    LogUtil.info2(res1-after, res1.toString());    ProcessController.returnImmediately(res1);    break; 遇到的坑 外部获取的类名不能直接通过Class.forName加载如下代码所示  // 使用目标 Bean 类名解析 JSON 字符串成目标 Bean        Class? targetBeanClass  Class.forName(targetBeanClassName); 实际会报错message: com.taobao.rigel.rap.model.PsrInfoOutputBean cannot be cast to com.taobao.rigel.rap.model.PsrInfoOutputBean, 原因是这两个bean虽然名字一样但是类加载器不同就导致bean的实际是不一样的。类是否相同可以用equals进行判断。 因此正确的做法是先获取advice返回类型的类加载器然后加载我们所需要的类这样业务的代码就会认得我们的bean了。    //获取advice返回类型的类加载器    ClassLoader behaviorClassLoader  advice.getBehavior().getReturnType().getClassLoader();    //加载最外层PsrInfoOutputBean    Class? targetClass  behaviorClassLoader.loadClass(ro.getClassNames()[0]); 题外话 为啥出现了这个错误 出现这个报错和开发的强转类型也有关系本地做了个小测试同样的数据。但咱也没发改开发的代码只能提提建议。 1、当前异常转化按照开发业务代码中的list强转对象 ListObject list JSON.*parseArray*(jsonString); PassengerFlightInfo passengerFlightInfo (PassengerFlightInfo) list.get(0); 这是使用强制类型转换的方式直接将 list 中的第一个元素强制转换为 PassengerFlightInfo 对象。这种方式在编译时不会报错但如果 list 中的第一个元素不是 PassengerFlightInfo 对象则会在运行时抛出 ClassCastException 异常。 2、正常转化优化过后用toJavaObject方法 PassengerFlightInfo passengerFlightInfo ((JSONObject) list.get(0)).toJavaObject(PassengerFlightInfo.class); 这是使用 FastJSON 提供的 toJavaObject 方法将 JSONObject 类型转换为 PassengerFlightInfo 对象。这种方式在运行时会检查转换是否可行如果 JSONObject 不包含 PassengerFlightInfo 的属性或结构不匹配会抛出异常。这种方式更安全因为它提供了更多的转换检查。 推荐使用第二种方式因为它更加健壮和安全能够更好地处理可能出现的异常情况并提供更好的错误信息。 - END - 本文由 mdnice 多平台发布
http://www.yutouwan.com/news/166246/

相关文章:

  • 在线培训系统平台seo关键词排名优化教程
  • 做的好的外贸网站网站开发框架怎么写
  • 长春市建设工程交易中心网站t和p在一起怎么做网页
  • 小昆山网站建设乡镇美丽乡村建设网站信息
  • 外卖网站建设网站建设如何开票
  • 做公司产品展示网站新产品怎样推广
  • 杭州高端响应式网站东营造价信息网
  • 详细介绍网站建设的整个流程熊猫关键词工具
  • 购物网站简介小说网站建设需要什么
  • 如何做各大网站广告链接做网站用最新软件
  • vps用什么软件做网站字体版权登记网站
  • 学校网站php源码|班级主页教师博客学生博客|学校网站织梦仿自己制作游戏的软件
  • 网站功能定制合同网站资料上传教程
  • wordpress 多站点共享网站建设资金方案
  • 学校网站建设软件推荐网站云空间和普通空间
  • 酒店团购的网站建设信息流广告二级代理
  • 中国品牌建设促进会网站网站logo怎么做最清楚
  • 为什么建设部网站进不去搜索引擎营销优缺点
  • 专业的网站制作专业公司如何写手机适配网站
  • 阜新市建设学校官方网站windows8 网站建站命令
  • 西青集团网站建设wordpress 管理地址
  • 正能量erp软件下载网站网站建设需要多少
  • 网站设计规划书怎么写女教师遭网课入侵直播录屏曝光i
  • 苏州企业建设网站公司网站新闻图片尺寸
  • 上海龙雨建设工程有限公司网站学校网站建设建议
  • 设计学校网站模板免费下载网络构建
  • 男男床做视频网站在线毕设做购物网站
  • 联盟营销网站有哪些wordpress连接失效
  • 高坪网站建设小说网站建站程序
  • 企业内部管理网站建设计划建设个人网站需要多少钱