范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

一个简单的跨域问题,一不小心就带来三个大大的BUG

  hello 大家好,我是阿粉,最近在做一个前后分离的项目,天天除了跟前端就是跟测试撕逼。今天,阿粉带着大家来了解一下 最近在项目中遇到的一个坑。  需求
  前端用了个富文本插件  Ueditor  ,插件初始化的时候需要从后端获取 config 配置。 入坑经历
  首先看下最开始的代码:   @RequestMapping(value = "/getConfig")     public Object getConfig(HttpServletRequest request){        return readConfig();     }   /**      * 读取配置文件      * @return      */     private UedConfig readConfig() {         String path = this.getClass().getResource("/").getPath();         FileInputStream fileInputStream = new FileInputStream(path + "config/ued_config.json");         //读出来,转成对象返回         ...     }
  代码大概就是这样,然后启动起来之后,前端告诉我没有获取到信息。纳尼,我postman自测都没问题,有数据返回。然后阿粉跑去问前端,有报错吗?前端说跨域了。当时阿粉就不乐意了,马上 ctrl+c 加上ctrl+v 把后端处理跨域请求的配置发给前端。然后前端告诉我是jsonp 请求跨域。阿粉一脸懵逼???jsonp 跨域?没听说过啊。马上找度娘去,果然一搜全是处理方式。因为是 springboot 项目,所以找了个最简单的。看代码:  @ControllerAdvice public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {     public JsonpAdvice(){         super("callback");     } }
  看,是不是很简单。要是 AbstractJsonpResponseBodyAdvice 这个单词下面没有红线就更完美了。没有引入类吗?怎么难得倒阿粉呢。alt+enter,嗯哼,什么情况,没有这个类?不可能啊。马上问度娘一下,原来这个类是 springboot 2.0以下才有。那怎么办呢?2.0以上好像没有处理 jsonp 跨域的方式啊。阿粉又在百度搜啊搜,果然,皇天不负有心人,阿粉看到 jackson 里面有个类 JSONPObject 可以处理,然后阿粉改了一下代码:  @RequestMapping(value = "/getConfig") public Object getConfig(String callback,HttpServletRequest request){     return new JSONPObject(callback,readConfig()); }
  然后重启,自测没问题。让前端试下,可以正常获取。OK,完美。
  后面项目完成了,前后端也对接完了,发到测试环境,让测试人员测试。Duang~一个bug扔阿粉头上,获取配置失败。不可能啊,肯定是前端的问题,跑去找前端让前端看下。前端看了之后给我来了一句,测试环境不跨域。瞬间一万头草尼玛从头上飘过。阿粉辛辛苦苦花了几个小时才把跨域问题处理了,你给我说测试环境不跨域。
  哎,没办法,这口锅只能自己含泪抗下了。然后阿粉又改了一次代码:  @RequestMapping(value = "/getConfig") public Object getConfig(String callback,HttpServletRequest request){     return StringUtils.isEmpty(callback) ? readConfig() : new JSONPObject(callback,readConfig()); }
  还是做了个兼容,因为前端还需要连我本地调试。不过这次应该没有问题了吧,阿粉心里还是有些小得意。提交代码,发测试,搞定。
  Duang~同样的bug再一次扔在了阿粉脸上。心都凉了,怎么回事呢?日志也没报错啊。捣鼓半天,不知道什么原因,阿粉只能加写log,因为在测试环境不好调试,也没报错。然后让运维配合一下,然后发现 this.getClass().getResource("/").getPath() 得到的路径不对,阿粉再一次一脸懵逼,这个不是获取项目根路径吗?怎么回事呢。
  然后阿粉又厚着脸皮找度娘,果然一下就找到原因了,因为 springboot 集成了tomcat,项目直接是打成 jar 包运行的,不能通过 this.getClass().getResource("/").getPath() 这种获取项目根路径的方式来获取,只能通过流的方式,然后阿粉又改了下代码:  /**      * 读取配置文件      * @return      */ private UedConfig readConfig() {     InputStream resourceAsStream = this.getClass().getResourceAsStream("/"+"config/ued_config.json");     //读出来,转成对象返回     ... }
  好了,这次提交之后终于可以了。解决了 bug ,阿粉心里美滋滋。  总结
  经常看到一些小伙伴说,本地对接没问题,怎么一到测试环境就那么多 bug 呢。阿粉总结了一下,主要还是以下几点:  系统不一样,本地一般都是window系统,而测试和线上一般都是 linux 系统。  运行方式不一样,本地 springboot 项目是通过代码工具 (idea)启动,而测试和线上是通过 jar 包启动。  比如还有一些其他 jar 引入的问题  …
  好了,阿粉这次的分享就到这里了。希望阅读阿粉文章的朋友少走一些弯路。要是觉得有用的话,记得点个赞哦。

2022年了,不会还没人知道擦地吸尘器吧?吸尘器过去作为一款吸尘器方便,但功能较有局限性的产品,一直没有广泛地被一般家庭使用,但如今,吸尘器已经发生了翻天覆地的变化,更为强劲的吸力配合更为多元的功能,为千家万户带来的便捷的科技之光尽情闪耀北京冬奥会上科技元素星光熠熠。低碳环保的开幕式向全世界展现了简约而灵动的中国,比赛场馆里猎豹超高速4K轨道摄像机系统清晰捕捉每一个瞬间,二氧化碳跨临界直冷制冰技术为运动员提供最佳比真正的缓存之王,GoogleGuava只是弟弟前面刚说到GuavaCache,他的优点是封装了get,put操作提供线程安全的缓存操作提供过期策略提供回收策略缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。这一篇我们将2022年计算机网络编程热门面试题总结(附标准答案)前言如今计算机网络基本可以说是中大厂面试必问的内容但是现在好多文章的答案并不够全面深刻,有的则过于详细,不利于面试以下是借鉴资料和他人文章,总结常见计算机网络面试题,希望为大家带来如何将Android程序做成插件化的形式?详解插件化实现原理作者ZYLAB文章概览发展历史常用名词使用Gradle简化插件开发流程类加载器ClassLoader插件化实现难点四大组件的插件化实现一发展历史2012年AndroidDynami2021年净利润同比高增长的工业母机概念股东土科技工业互联网核心标准的主要起草单位,概念题材5G大数据智慧城市,总市值51亿。主力资金净流入942。82万元。解读阳线上穿4根均线,呈多头排列,K线出现多方炮的形态,如果接下iPhoneSE3国行版售价曝光,库克坚持低价策略,国产厂商压力山大作为全球手机市场知名度最高和影响力最强的品牌,苹果每一代的iPhone新机,往往都会引发广泛的关注,并获得极其出色的销量成绩。就像iPhone13系列,虽然目前已经不算是新款机型了一台随身携带的ampampquotUPS不断电ampampquot,ORICO奥睿科AT150户外储能电源体验移动电源的普及率基本和手机一样,每家每户可能都不止一个了。但随着我们的各种数码产品越来越多,尤其数码爱好者们过年过节和出门游玩,手机,无线耳机,平板,笔记本,相机无人机至少有一半会新年赶快送自己一台清洁神器,感受女神迪丽热巴同款精致生活假期结束,很多人已经回到了工作岗位上,回到了紧张的生活节奏中。不过在认真工作的同时,生活中的问题也不能马虎,尤其是在新冠疫情仍然没有停歇的当下,居家卫生环境的重要性越来越显著。想要419家聚合支付型机构完成备案新增抖音支付等11家本报记者李冰距离5月1日即将实施的收单外包服务机构自律规范不足百天。中国支付清算协会再次更新通过备案的收单外包服务机构名单,有200家收单外包服务机构通过备案。其中,包括武汉合众易沉默两个月,华为又有动作,鸿蒙要脱胎换骨?突然发现,鸿蒙已经沉默了2个月了!去年6月鸿蒙发布出来之后可以说是风光无限,尽管说后面遇到各种质疑,各种遇冷。但是像倪光南院士人民日报都出来替鸿蒙加油打气,倪光南院士甚至在某正式场
WEY玛奇朵诠释传承与创新日前,新一代混动SUVWEY玛奇朵正式发布官图,预示着WEY品牌智能混动时代即将到来。玛奇朵基于WEY品牌家族先锋张力美学概念,塑造未来科技感,同时又以敏锐青春的产品设计理念标签,此消彼长的ikbc时光机F108ikbc是国内CHERRY轴键盘最热销的品牌之一,也是OEM机械的代表品牌,它受台湾Ducky的影响,在品牌亮相之初,最打动人的除了PBT双色键帽,还是它的大键手感。一直以来,一个如何看待硬核式升级的雷蛇巴塞利斯蛇V2巴塞利斯蛇是近几年雷蛇主打的纯右手鼠标之一,它是针对罗技G502在300元价位针锋相对的产品。HERO引擎的加持也一度让G502优势明显,续写重型武器的神传奇。直到雷蛇等来了原相联罗技GHUB更新GPW狗屁王固件GPW狗屁王(GPROWIRELESS),是罗技最成功的高端鼠标,一度集各种黑科技于一身,无线性能握感和操控几乎没有软肋,是难以超越的存在。前阵子推出粉色版,最近发现GHUB也做了拆解从芯复生的罗技MX518LEGENDARY在HERO引擎取得成功之后,罗技逐步将各个级别的HERO引擎普及到相应的产品上,2018年10月,这项福利轮到了罗技的传奇鼠标曾一度与微软IE3。0齐名的MX518,有趣的是差不多罗技HERO12K战力测试,G304哪个DPI最准不记得什么时候,但一定是从G304开始,无线游戏鼠标的稳定性续航不再成为我们的困扰,由LIGHTSPEED无线技术和HERO12K引擎打造了G304超神的存在,而且价格也向消费者频TRUEMOVECORE核心,赛睿RIVAL3拆解过去,国外品牌但凡要出对称机身的鼠标,往往侧键都是对称的,即真正意义上的对称鼠标,左右手通用,反而一些随意的国产品牌则是更早选择对称机身右手鼠标的。不过,现在老外们也不那么固执了,特色民宿带动乡村旅游热飞猪莫干山民宿套餐预订量同比涨6倍随着暑期旅游进入预订高峰,特色民宿带动的乡村旅游热成为市场新亮点。以避暑及休闲度假著称的浙江省德清县莫干山目的地热度持续攀升。据飞猪平台,近一个月,莫干山民宿套餐预订量同比涨6倍。矿视界译文Chia矿池正式上线,矿工需要注意哪些事情?7月7日,Chia官方正式发布其矿池协议1。2。0版。该版本的发布标志着全新绘图(plots)格式的出现即可移植绘图(portableplots)。可移植和非可移植绘图有何不同?不热门的洞洞鼠标是从这里开始的,但它却不火游戏鼠标轻量化的趋势日益明显,罗技雷蛇都在守住底线的前提下想办法(如结构优化PCB设计优化和背光件减少)让鼠标更轻巧同样好用,比如GPW毒蝰这样的鼠标,这是专业厂商的思路。却也有些其实它和MASTER是一对办公室CP,罗技K845简评在罗技外设发烧友中当属G系列产品呼声最高,其实在办公领域罗技也有很高的建树,受众群体数量远超游戏系列。不过办公机械键盘一直是罗技一块短板,虽然目前办公键盘主要以薄膜键盘为主,受到游