配置CORS解决跨域调用—反思思考问题的方式
导读:最近都在用一套完整的Java EE的体系做系统,之前都是用spring框架,现在弄这个Java EE,觉得新鲜又刺激。但,由于之前没有过多的研究和使用,在应用的过程中,也出现了不少的问题。累积了好几个,现在开始一一进行总结分享。这篇博客,主要是分享CORS解决跨域调用的过程
一、问题的出现
由于我们在项目中使用了一个很牛掰的插件Jeddict,然后除了逻辑性的代码,其他基本的代码(从dao到前端Angular)都是插件生成的,所以,我们要做的,就是连通前端Angular和后端自动生成的Restful接口。PS:对于Jeddict的问题,后续博客中再进行说明。
最开始是把代码生成,然后自动构建发布,让局域网类的同组小伙伴调用测试,也用postMan进行检测,没有发现问题(走到这一步,也是一路坑)。后来在进行Angular服务调用的时候,失败。具体错误信息如下:
二、解决过程
1,首先是之前遇到过跨域问题的小伙伴,提出了一个方案,说只要在后端返回数据的时候,设置一下header就可以解决。具体代码如下:
//解决跨域问题
response.setHeader("Access-Control-Allow-Origin", "*");
但是,查了一下代码,发现这里面所用到的response是HttpServletResponse类型,而现在工程里面自动生成的代码,虽然也是返回一个Reponse,但这个Response和HttpServletResponse完全是两回事。要使用这种方法解决,得引入HttpServletReponse依赖,然后在每个方法里面增添response参数,还得修改原有的controller返回方式,也就意味着,原有系统的前端调用也需要重新改写。PS:
真有一种费了死劲拆东墙补西墙的感觉。
结论:不作为首选方案
2,想到了JSONP,但JSONP的访问方式受到了GET限制,不符合当前项目的需求。结论:不采用
3,CORS
最开始是在spring官网上找到了跨域的解决方案(团队要求首先从官网查资料),然后大概看了看,是自己写了个cors的filter,其实也就是配置了响应标头,基本代码如下:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse)response;
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
res.setHeader("Access-Control-Max-Age", "3600");
res.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(request, response);
}
web.xml文件配置
<!-- cors解决跨域访问问题 -->
<filter>
<filter-name>cors</filter-name>
<filter-class>com.ustcinfo.kanms.support.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这个方案,测试通过。然后,其实还是有点麻烦(原谅我已经懒到了一种不可理喻的地步),也根据大哥的引导,说spring官网能提供这么一个解决方案,java EE也可能提供一个解决方案。然后,我就去官网看了看,果然,有解决方案。具体如下:
Enabling CORS for ADF Business Component REST Services
简单、粗暴!
最后解决了,但还出了个小毛病,报了405 (Method Not Allowed) ,我就回头去看我的程序,发现理论上没问题,就再看了看具体的错误信息:
终于,本宝宝发现了POST,然后很确定提供服务的访问方式是GET,问题就这么解决了。所以,再一次提醒我自己,认真看错误信息!
三、个人总结
哎,发现一个可以让自己有所提升的点,是什么呢?分析一下:
我之前的常有习惯:遇到问题,先看看官网,不行的话,就百度和谷歌一下,然后再不行,我就问问项目组的伙伴。这种方式,本身没有什么大问题。但是,今天学习到了大哥的一种思维方式:spring官网提供了一个解决方案,由此推导Java EE官网也可能提供一个官方解决方案。就这种由此及彼的推导方式,联系思维,在之前,我还是比较弱的。今后,要好好实践运用!
配置CORS解决跨域调用—反思思考问题的方式的更多相关文章
- SpringBoot配置Cors解决跨域请求问题
一.同源策略简介 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[or ...
- 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域
原文:一步一步学习SignalR进行实时通信_3_通过CORS解决跨域 一步一步学习SignalR进行实时通信\_3_通过CORS解决跨域 SignalR 一步一步学习SignalR进行实时通信_3_ ...
- VUE前端项目配置代理解决跨域问题
VUE前端项目配置代理解决跨域问题 问题如下,经常在本地调试接口出现这种问题 解决方式1:Chrome 的扩展插件 以前使用Chrome 的扩展插件,但是有时候还是会出现莫名其妙的问题. 需要梯子才行 ...
- Spring Boot中通过CORS解决跨域问题
今天和小伙伴们来聊一聊通过CORS解决跨域问题. 同源策略 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略. 同源策略是由Netscap ...
- 使用cors解决跨域遇到浏览器发出options嗅探
前言: 本地开发起的服务器,通过修改hosts文件设置域名映射到本地,接口在测试环境 1. 服务器端设置cors, 配置access-control-allow-origin 头部 使用蚂蚁金服的up ...
- Spring Boot2 系列教程(十四)CORS 解决跨域问题
今天和小伙伴们来聊一聊通过CORS解决跨域问题. 同源策略 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略. 同源策略是由 Netsca ...
- 服务端 CORS 解决跨域
当协议.域名.端口中任一个不同时产生跨域 CORS 跨域资源共享(Cross-origin resource sharing) 参考资料https://developer.mozilla.org/zh ...
- 14 微服务电商【黑马乐优商城】:day06-使用nginx反向代理并掌握cors解决跨域
本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...
- Django使用jsonp和cors解决跨域请求问题
1.使用jsonp的方式解决跨域请求的问题 我启动两个django项目,然后使用的端口不一样,在项目1中通过ajax发请求给项目2,然后接受项目2发送过来的数据 先看项目1的ajax的代码 $(&qu ...
随机推荐
- MySQL如何找出未提交事务信息
前阵子,我写了一篇博客"ORACLE中能否找到未提交事务的SQL语句", 那么在MySQL数据库中,我们能否找出未提交事务执行的SQL语句或未提交事务的相关信息呢? 实验验证了一下 ...
- Android(java)学习笔记105:Android启动过程(转载)
转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...
- coreData-Fetching Managed Objects
https://developer.apple.com/library/content/documentation/DataManagement/Conceptual/CoreDataSnippets ...
- How to restrict root user to access or modify a file and directory in Linux
Now in this article I will show you steps to prevent or restrict access of root user to access certa ...
- C09 指针
目录 指针相关概念 指针变量 null指针 指针的算术运算 指针数组 指向指针的指针 传递指针给函数 从函数返回指针 指针相关概念 变量 如果在程序中定义了一个变量,在对程序进行编译时,系统就会为这个 ...
- VS code 豆沙绿护眼主题
一.下载亮色主题Atom One Light 二.找到settings.JSON,粘贴JSON 快捷键输入 Ctrl+Shift+p ,输入settings,选择open settings (J ...
- 毛毛虫组【Beta】Scrum Meeting 1
第一天 日期:2019/6/23 前言 第一次会议: 时间:6月20日 地点:教9-C404机房 内容:此次会议主要确定组内成员具体分工,并对目标进行了初步的确定. 1.1 今日完成任务情况以及遇到的 ...
- JTT808、JTT809、JTT796、JTT794、JTT1077、JTT1078区别与交通部道路运输车辆卫星定位系统部标标准大全下载地址
部标JT/T808协议.JT/T809协议.JT/T796标准.JT/T794标准的区别,他们是基于不同的通信场景,不同的通信对象,不同的设计目的和目标而制定出来的.首先要知道这些标准的全称是什么意思 ...
- ReactiveCocoa入门-part1
作为一个iOS开发者,你写的每一行代码几乎都是在响应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理 ...
- [vijos]P1642 班长的任务
背景 十八居士的毕业典礼(1) 描述 福州时代中学2009届十班同学毕业了,于是班长PRT开始筹办毕业晚会,但是由于条件有限,可能每个同学不能都去,但每个人都有一个权值,PRT希望来的同学们的权值总和 ...