导读:最近都在用一套完整的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解决跨域调用—反思思考问题的方式的更多相关文章

  1. SpringBoot配置Cors解决跨域请求问题

    一.同源策略简介 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[or ...

  2. 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域

    原文:一步一步学习SignalR进行实时通信_3_通过CORS解决跨域 一步一步学习SignalR进行实时通信\_3_通过CORS解决跨域 SignalR 一步一步学习SignalR进行实时通信_3_ ...

  3. VUE前端项目配置代理解决跨域问题

    VUE前端项目配置代理解决跨域问题 问题如下,经常在本地调试接口出现这种问题 解决方式1:Chrome 的扩展插件 以前使用Chrome 的扩展插件,但是有时候还是会出现莫名其妙的问题. 需要梯子才行 ...

  4. Spring Boot中通过CORS解决跨域问题

    今天和小伙伴们来聊一聊通过CORS解决跨域问题. 同源策略 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略. 同源策略是由Netscap ...

  5. 使用cors解决跨域遇到浏览器发出options嗅探

    前言: 本地开发起的服务器,通过修改hosts文件设置域名映射到本地,接口在测试环境 1. 服务器端设置cors, 配置access-control-allow-origin 头部 使用蚂蚁金服的up ...

  6. Spring Boot2 系列教程(十四)CORS 解决跨域问题

    今天和小伙伴们来聊一聊通过CORS解决跨域问题. 同源策略 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略. 同源策略是由 Netsca ...

  7. 服务端 CORS 解决跨域

    当协议.域名.端口中任一个不同时产生跨域 CORS 跨域资源共享(Cross-origin resource sharing) 参考资料https://developer.mozilla.org/zh ...

  8. 14 微服务电商【黑马乐优商城】:day06-使用nginx反向代理并掌握cors解决跨域

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  9. Django使用jsonp和cors解决跨域请求问题

    1.使用jsonp的方式解决跨域请求的问题 我启动两个django项目,然后使用的端口不一样,在项目1中通过ajax发请求给项目2,然后接受项目2发送过来的数据 先看项目1的ajax的代码 $(&qu ...

随机推荐

  1. MySQL如何找出未提交事务信息

    前阵子,我写了一篇博客"ORACLE中能否找到未提交事务的SQL语句", 那么在MySQL数据库中,我们能否找出未提交事务执行的SQL语句或未提交事务的相关信息呢? 实验验证了一下 ...

  2. Android(java)学习笔记105:Android启动过程(转载)

    转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...

  3. coreData-Fetching Managed Objects

    https://developer.apple.com/library/content/documentation/DataManagement/Conceptual/CoreDataSnippets ...

  4. 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 ...

  5. C09 指针

    目录 指针相关概念 指针变量 null指针 指针的算术运算 指针数组 指向指针的指针 传递指针给函数 从函数返回指针 指针相关概念 变量 如果在程序中定义了一个变量,在对程序进行编译时,系统就会为这个 ...

  6. VS code 豆沙绿护眼主题

    一.下载亮色主题Atom One Light 二.找到settings.JSON,粘贴JSON 快捷键输入  Ctrl+Shift+p   ,输入settings,选择open settings (J ...

  7. 毛毛虫组【Beta】Scrum Meeting 1

    第一天 日期:2019/6/23 前言 第一次会议: 时间:6月20日 地点:教9-C404机房 内容:此次会议主要确定组内成员具体分工,并对目标进行了初步的确定. 1.1 今日完成任务情况以及遇到的 ...

  8. JTT808、JTT809、JTT796、JTT794、JTT1077、JTT1078区别与交通部道路运输车辆卫星定位系统部标标准大全下载地址

    部标JT/T808协议.JT/T809协议.JT/T796标准.JT/T794标准的区别,他们是基于不同的通信场景,不同的通信对象,不同的设计目的和目标而制定出来的.首先要知道这些标准的全称是什么意思 ...

  9. ReactiveCocoa入门-part1

    作为一个iOS开发者,你写的每一行代码几乎都是在响应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理 ...

  10. [vijos]P1642 班长的任务

    背景 十八居士的毕业典礼(1) 描述 福州时代中学2009届十班同学毕业了,于是班长PRT开始筹办毕业晚会,但是由于条件有限,可能每个同学不能都去,但每个人都有一个权值,PRT希望来的同学们的权值总和 ...