SpringMVC支持跨域访问的CORS配置

tomcat服务器跨域需要的CorsFilter jar文件 tomcat服务器部署后,访问遇到跨域问题,资源包含需要的cors-filter-1.7.jarr和java-property-utils-1.9。测试无误,需要注意的是资源的命名空间为com.thetransactioncompany.cors 立即下载
目前主流的跨域访问技术有JSONP和CORS,JSONP的优势在于能够支持较老版本的浏览器,弱势在于只能处理GET的请求,而CORS的优势在于能处理所有类型的请求,但弱势在于不能处理IE8以下版本的请求,说得比较笼统,悉知。

        本文主要阐述在SpringMVC中如何通过配置CORS来支持跨域访问,而前端不需要做任何配置。

        以下是配置步骤:

1.Spring的版本建议采用4.2.0.RELEASE版本;

2.web.xml中加入过滤器配置;

    <!-- CORS过滤器 start -->
    <filter>
        <filter-name>cors</filter-name>
        <filter-class>com.sdzn.filter.CorsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>cors</filter-name>
        <url-pattern>/api/*</url-pattern>
    </filter-mapping>
    <!-- CORS过滤器 end -->

3.加入过滤器配置类
package com.sdzn.filter;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


/**
 * CorsFileter 功能描述:CORS过滤器
 *
 * @author RickyLee【l**@*.com.cn】
 * @date 2017/2/9 11:24
 */
@Component
public class CorsFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}
4.另起一个项目或页面进行跨域测试;
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript">
    $(function(){
        //按钮单击时执行
        $("#testAjax").click(function(){
              //取Ajax返回结果
              //为了简单,这里简单地从文件中读取内容作为返回数据
              htmlobj=$.ajax({url:"http://192.168.0.111:8080/api/v1/test",async:false});
               //显示Ajax返回结果
               $("#myDiv").html(htmlobj.responseText);
         });
    });
</script>    
</head>
    <body>
        <div id="myDiv"><h2>通过 AJAX 改变文本</h2></div>
        <button id="testAjax" type="button">Ajax改变内容</button>
    </body>
</html>

如果页面内容有返回的json值,则跨域配置成功。


2017年2月10日追加:

发现上述配置并不能实现Cookie共享,作以下更正:

1.上述第2/3步骤可以统一改为以下配置来实现,在spring-mvc.xml中加入以下代码:

    <!-- API 接口跨域配置 -->
    <mvc:cors>
        <mvc:mapping path="/api/**"
                     allowed-origins="http://d.demo.com:8080"
                     allowed-methods="POST, GET, OPTIONS, DELETE, PUT"
                     allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
                     allow-credentials="true" />
    </mvc:cors>

2.网页端用ajax发起需要cookie上传功能支持,具体代码如下:
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript">
    $(function(){
        $("#testAjax").click(function(){
			  $.ajax("http://192.168.0.111:8080/api/v1/test", {
				type: "POST",
				data: {username:"Ricky"},
				dataType: "json",
				xhrFields: {
					withCredentials: true
				},
				crossDomain: true,
				success: function(data, status, xhr) {
					$("#myDiv").html(count+data.message);
				}
			  });
         });
    });
</script>    
</head>
    <body>
        <div id="myDiv"><h2>Change AJAX Value</h2></div>
        <button id="testAjax" type="button">Ajax Click To Change</button>
    </body>
</html>
3.在本地hosts配置中加入

127.0.0.1      d.demo.com

4.将服务端部署在192.168.0.111的机器上,在本机上启动tomcat用http://d.demo.com:8080/index.html进行访问,可以看到,虽然是在不同的域名下,但是仍然可以取得cookie中的值,但如果去掉下面这个配置则不能读到cookie

xhrFields: {
	withCredentials: true
},
crossDomain: true,
从波士顿动力SpotMini拆解看四足机器人机械设计:关节布局与电机选型的5个关键决策点 本文深入解析波士顿动力SpotMini四足机器人的机械设计,聚焦关节布局与电机选型的5个关键决策点。通过拆解髋关节偏移距、膝关节传动链、电机热管理等核心设计,揭示商业级四足机器人的工程智慧,为工业巡检、物流机器人等应用提供实用参考。 阅读详情

相关推荐

告别Quartus II的漫长等待:用VSCode+iverilog+GTKWave搭建你的轻量级Verilog仿真环境(2024保姆级教程)

本文详细介绍了如何利用VSCode、iverilog和GTKWave构建高效的Verilog/SystemVerilog开发环境,替代传统的Quartus II和ModelSim工具。通过2024年最新的保姆级教程,帮助开发者实现秒级启动、低资源消耗的轻量级仿真环境,显著提升数字电路设计的开发效率和调试体验。

weixin_33690963的博客 559

Spring Mvc处理CORS跨域问题

对于前端来说,跨域问题会经常遇到,前端有很多的处理方法,例如JSONP 就是使用的比较多的方案,但 JSONP 是一个非官方的跨域协议同时也只支持 GET 请求。所以这里就使用CORS处理跨域。这种处理方式,将工作完全交付给了后台java层去做了。下面简单说明下使用的步骤: 1、在web.xml中添加如下代码: <filter> <filter-name>cors</filter-name> <filter-class>myCORSFi.

haitunxiaomo的专栏 665

华为鸿蒙系统也能用!5分钟搞定谷歌三件套安装(附最新APK下载链接)

本文为华为鸿蒙系统用户提供了一份详尽的谷歌三件套(Google Play服务、商店及框架)手动安装指南。文章核心在于无需Root,通过ADB命令获取设备信息,并从可靠来源下载匹配版本的APK,按照正确顺序安装,从而解决海外应用依赖问题,实现5分钟快速部署。

c7d8e9的博客 6463

javaWeb解决跨域问题

javaWeb解决跨域问题

来自外太空的鱼-张小张 1371

N32串口DMA接收不定长数据:空闲中断与DMA通道的协同处理

本文详细解析了在N32系列MCU中,利用串口空闲中断与DMA通道协同处理不定长数据的核心机制与实战方法。通过剖析空闲中断的触发时机、DMA的配置要点以及两者协同工作的关键时序,提供了避免数据错乱的避坑指南和完整的代码实现,旨在帮助开发者构建高效、可靠的嵌入式串口通信子系统。

weixin_29191669的博客 122

【Network Management】AUTOSAR局部网络管理从0到1配置实践

AUTOSAR局部网络管理从0到1配置实践

qq_36056498的博客 2913

Cors解决跨域问题之web.xml过滤器方式

web.xml配置方式 <filter> <filter-name>CorsFilter</filter-name> <filter-class>com.springmvc.common.filter.CORSFilter</filter-class> </filter> <filter-...

William_TWG的博客 1643

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3470

SpringMvc CORS-跨域处理

同源"指的是"三个相同":同源策略的目的:是为了保证用户信息的安全,防止恶意的网站窃取数据。限制:如果非同源,共有三种行为受到限制。工作原理是添加新的HTTP headers来让服务器描述哪些源的请求可以访问该资源,对于可能对服务器造成不好影响的请求,规范规定浏览器需要先发送“预检”请求(也就是OPTION请求),在预检请求通过后再发送实际的请求,服务器还可以通知客户端是否应该随请求发送“凭据”(例如 Cookie 和 HTTP 身份验证)。Request HeaderResonse Header支持的源,

存在,即合理 969

Python控制TEMI1000/TEMI1500测试温箱

该温箱是我司从昆山振弘检测设备有限公司采购的TEMI 1000,但是控制器用的是韩国的,关于控温箱这个项目,可参考的资料仅有一份官方的manual,里面包含一些命令格式。只要你有温箱,就应该可以向厂家索取该文档。该温箱的通讯接口只有一个RS232接口,要想实现远程控制,需要有串口转USB的线;类似于下图所以,想依靠python来与之进行通信,还是要通过python 的pyserial库,关于怎么安装pyserial,过于简单,这里不做赘述,可自行百度。

xgh1951的博客 1万+

Sigrity Power DC Package Multi-Resistor Compact ET Model Extraction模式提取封装基板电热阻模型

DIE(定义DIE的参数):material设置为silicon(硅),Attach material(贴片的材料,设置为Die Attach),Attach thickness(贴片的材料的厚度,厚度设置为0.001mm,点击ok。Cap为覆盖材料,Material定义材料类型,thickness定义厚度,length和width定义长宽,Adhesive Material为胶的材料,Adhesive Material为胶的厚度,本例不定义,跳过即可。

weixin_54787054的博客 437

Spring完美解决跨域问题

一、 Spring MVC 从4.2版本开始增加了对CORS的支持在Spring MVC 中增加CORS支持非常简单,可以配置全局的规则&lt;mvc:cors&gt; &lt;mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-meth...

zjq852533445的博客 2万+

【华为OD机试真题 Python语言】371、增强的strstr | 机试真题+思路参考+代码解析(E卷复用)

>C语言有一个库函数: char *strstr(const char *haystack,const char *needle) ,实现在字符串haystack中查找第一 次出现字符串needle的位置,如果未找到则返回null >  现要求实现一个strstr的增强函数,可以使用带可选段的字符串来模糊查询,与strstr一样返回首次查找到的字符串位置 >  可选段使用"[]"标识,表示该位置是可选段中任意一个字符即可满足匹配条件,比如"a[bc]"表示可以匹配"ab"或"ac" >&

KJ.JK 2605

SpringMvc解决跨域问题

原文:https://my.oschina.net/wangnian/blog/689020 前言:今天解决js跨域,搞了一下午,呜呜,以下是我整理的一些解决方法 介绍: 跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求。比如说,域名A(http://domaina.example)的某 W...

南风不竞的专栏 474

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringBoot---CROS 跨域请求

一、Web 开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS 等等 CORS 与 JSONP 相比   1、 JSONP 只能实现 GET 请求,而 CORS 支持所有类型的 HTTP 请求。  2、 使用 CORS,开发者可以使用普通的 XMLHttpRequest 发起请求和获得数据,比起 JSONP 有更好的 错误处理。  3、 JSONP 主要被老的浏览器支持,它们...

浅瞳夜未的博客 409

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

跨域问题的解决

如果

Wen__Fei的博客 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring 跨域支持(CROS)注解:@CrossOrigin

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33682719的博客 1032

springmvc解决AJAX跨域

用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面由于安全方面的原因,客户端js使用xmlhttprequest只能用来向来源网站发送请求。

桃李不言下自成蹊 25万+

java ssm 跨域_springMVC 怎么实现跨域请求?

springmvc 4.2开始新增对cors的支持,推荐一篇blog :http://blog.youkuaiyun.com/isea533/article/details/50449907如果走nginx 也可以在nginx配置如下server {location / {if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Or...

weixin_39543647的博客 102

Spring MVC 4.2 增加 CORS 支持

Spring MVC 4.2 增加 CORS 支持 跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求。比如说,域名A(http://domaina.example)的某 Web 应用程序中通过标签引入了域名B(http://domainb.foo)站点的某图片资源(http://domainb.foo...

dawuafang 649

springboot 解决跨域

跨源资源共享(Cross origin resource Share,CORS)是大多数浏览器实现的W3C规范,它允许您以灵活的方式指定授权的跨域请求类型,而不是使用一些不太安全、功能也不太强大的方法,如IFRAME或JSONP。 从版本4.2开始,Spring MVC支持CORS。在Spring Boot应用程序中使用带有@CrossOrigin注释的控制器方法CORS配置不需要任何特定配置。可以通过使用定制的addCorsMappings(CorsRegistry)方法注册WebMvcConfigure

zsyqwe的博客 203

Springboot全局实现跨域的配置类

/ 实现跨域 测试。

weixin_58372646的博客 161

Java - Spring MVC 实现跨域资源 CORS 请求

当然你也可以在Controller上使用。

zy103118的博客 560

SpringBoot解决全局跨域

【代码】SpringBoot解决全局跨域。

m0_75137365的博客 349
上一篇: MyBatis的传入参数parameterType类型
下一篇: Ajax跨域请求保证同一个session的问题
justdoit_potato
博客等级 码龄11年 44粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值