千家信息网

springboot跨域问题带来的BUG怎么解决

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍了springboot跨域问题带来的BUG怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot跨域问题带来的BUG怎么解决文章都会有
千家信息网最后更新 2025年01月24日springboot跨域问题带来的BUG怎么解决

这篇文章主要介绍了springboot跨域问题带来的BUG怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot跨域问题带来的BUG怎么解决文章都会有所收获,下面我们一起来看看吧。

需求

前端用了个富文本插件 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 项目,所以找了个最简单的。看代码:

@ControllerAdvicepublic 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");    //读出来,转成对象返回    ...}

关于"springboot跨域问题带来的BUG怎么解决"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"springboot跨域问题带来的BUG怎么解决"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

前端 问题 代码 测试 项目 处理 配置 方式 环境 知识 路径 马上 内容 原因 回事 对象 插件 文件 篇文章 还是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 腾讯云服务器会被封吗 云服务器如何访问家里的设备 网络安全法的27条 财政一体化软件开发公司 深圳恒生互联网科技 天津曙光服务器虚拟化哪家好 中兴通讯服务器经销商 怎么找到祖龙的服务器 普华永道软件开发好吗 阴阳师几个服务器 六盘水高密度存储服务器价格 销售服务合同与采购软件开发合同 数据库图片的数据类型ole 企业网络安全应急预警通知书 运营分析软件开发商 武汉鑫东付网络技术有限公司 不小心把数据库覆盖了 网络安全规划指标 如何检查远程服务器是否启动 渭南市网络安全应急指挥中心 怎么进入天空岛服务器 ddr3服务器内存啥意思 企业履行网络安全监管义务 武汉软件开发公司哪家最好 软件开发项目面试讲不清楚 计算机网络技术对电子商务的作用 ctf网络安全大赛文件上传 互联网科技公司 校招 学软件开发去当兵 数据库有主键怎么办
0