springmvc跨域
//mvc默认是text/plain;charset=ISO-8859-1
@RequestMapping(value = "/xxx", produces = "application/json;charset=UTF-8")
@ResponseBody
public xxx xxx() {return xxx;}
使用jackson:
返回java对象,springmvc会自动调用jackson,将java对象转换成json格式字符串
使用json-lib:
可以将java对象转化为json格式字符串,然后直接返回字符串
不能直接转list等集合,可以将list加到map中,再转map
JSONObject jsonObjectFromMap = JSONObject.fromObject(map);
String jsonStr = jsonObjectFromMap.toString();
跨域:
跨域要在后端增加参数String jsonpCallback,
并将jsonpCallback拼接到返回的json格式字符串中,
String jsonStr = jsonpCallback + "(" + jsonStr + ")";
页面则要设置为:
dataType: 'jsonp',
jsonp: "jsonpCallback",//jsonp的值默认为callback
jsonpCallback:"myJsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
//jsonpCallback=myJsonpCallback将作为参数传给后端,后端获取参数jsonpCallback,并将jsonpCallback参数的值myJsonpCallback作为调用的函数名
//jsonp使用默认值callback,则jsonp和jsonpCallback都可省略
跨域原理:
1.跨域的障碍:
同源策略:基于安全的原因,浏览器使用同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。
简单点说,就是浏览器限制脚本只能和同协议、同域名、同端口的脚本进行交互。
2.绕开障碍:
<script>、<img>、<iframe>等标签拥有跨域的能力,
JSONP就是利用<script>标签绕过浏览器的同源策略,
JSONP是英文JSON with Padding的缩写,是一个非正式传输协,允许服务端生成<script>标签返回给客户端。
返回的<script>标签中就是一个远程js文件,内容是调用本地的一个函数,并将要传输的数据作为该函数的参数
3.分析例子:
$.ajax({
type: "get",
url: "xxx",
dataType: "jsonp",
jsonp: "jsonpCallback",
jsonpCallback:"myJsonpCallback",
success: function(json){
alert(json);
}
});
public String findNearby(String jsonpCallback) {
String json = "{name:'xiaoming'}";
json = jsonpCallback+"("+json+")";//返回的最终字符串为"myJsonpCallback({name:'xiaoming'})"
return json;
}
//这里实际是调用myJsonpCallback函数,并将{name:'xiaoming'}作为参数
//jquery会将success函数封装成myJsonpCallback函数,实际上调用的就是success函数,而参数就是后台的json格式数据
//这样就能在success函数中处理后台传输的数据了
参考:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html
springmvc跨域的更多相关文章
- SpringMVC跨域问题排查以及源码实现
SpringMVC跨域问题排查以及源码实现 最近一次项目中,将SpringMVC版本从4.1.1升级到4.3.10,出现跨域失败的情况.关于同源策略和跨域解决方案,网上有很多资料. 项目采用的方式是通 ...
- SpringMvc跨域支持
SpringMvc跨域支持 在controller层加上注解@CrossOrigin可以实现跨域 该注解有两个参数 1,origins : 允许可访问的域列表 2,maxAge:飞行前响应的缓存持续 ...
- 关于springmvc跨域
spingMVC 3.X跨域 关于跨域问题,主要用的比较多的是cros跨域. 详细介绍请看https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Acces ...
- springmvc跨域(转)
跨域资源共享 CORS 详解 原文链接:http://www.ruanyifeng.com/blog/2016/04/cors.html 作者: 阮一峰 日期: 2016年4月12日 CORS是 ...
- SpringMvc 跨域处理
导读 由于浏览器对于JavaScript的同源策略的限制,导致A网站(Ajax请求)不能通过JS去访问B网站的数据,于是跨域问题就出现了. 跨域指的是域名.端口.协议的组合不同就是跨域. http:/ ...
- (H5)FormData+AJAX+SpringMVC跨域异步上传文件
最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页 ...
- springmvc跨域+token验证(app后台框架搭建二)
这是app后台框架搭建的第二课,主要针对app应用是跨域的运用,讲解怎么配置跨域服务:其次讲解怎么进行token验证,通过拦截器设置token验证和把token设置到http报文中.主要有如下: ...
- springmvc跨域+token验证
1)app后台跨域设置 2)拦截器中设置http报文header中token 3)token的生成实现 ==================================== ...
- springmvc跨域问题的解决
如果只想对某个方法开启跨域设置: controller上添加注解: @CrossOrigin(maxAge = 3600) 在特定的方法上添加注解: @CrossOrigin("*" ...
随机推荐
- springmvc的一个错误
初学ssm,碰到一个错误,非注解的就没错,注解的就错了 找了半天,终于发现错误,真的很傻比啊,导入的springframework版本不一致... 都导入4.3.18版本的即可...
- 从global到mooncake迁移SQL Azure
之前遇到了问题,在此备注一下: 因为两个环境基本上可以认为是隔离的,所以迁移过程基本上只有通过导出.导入的方式(也是官方推荐的方式): 1.从global上进行数据库的export操作(扩展名bacp ...
- 本地代码推送到github仓库
git 初始化 cd 到需要提交的项目目录下,执行git init 配置用户名和邮箱 git config --global user.name "codingID" git co ...
- HTTP协议包分析(小马上传大马)
最近工作内容是分析防火墙日志,看日志是正确,本地实验小马上传大马 抓取http包如下.可以在分析过程中进行借鉴. 该http请求的行为是通过小马,在小马的当前目录创建一个dama.php的文件,文件 ...
- sp_who 查看数据库连接数
create table #TempTable(spid int,ecid int,statusvarchar(32),loginname varchar(32),hostname varchar(3 ...
- 阿里巴巴 JAVA 开发手册
阿里巴巴 JAVA 开发手册 1.0.0 阿里巴巴集团技术部 2016.12.7 首次向 Java 业界公开 一. 编程规约(一) 命名规约1. [强制]所有编程相关命名均不能以下划线或美元符号开始, ...
- Django组件 - cookie、session、用户认证组件
一.cookie 1.会话跟踪技术 1)什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话 ...
- 【Spring MVC】spring mvc中相同的url请求返回不同的结果
在项目中凡是使用Spring MVC这种控制器的,大多都是返回JSON数据对象,或者JSP页面. 但是相同的URL请求如何让他自动的选择放回的是什么? 在这里有由于鄙人没有亲自测试过,就不敢乱贴代码, ...
- springcloud Hystrix fallback无效
在使用feign调用服务的时候防止雪崩效应,因此需要添加熔断器.(基于springboot2.0) 一.在控制器的方法上添加 fallbackMethod ,写一个方法返回,无须在配置文件中配置,因 ...
- k8s使用ceph作为后端存储挂载
一.在ceph集群上操作: 1.创建池(主要使用存储类来进行持久卷的挂载,其他的挂载方式不好使也太麻烦):ceph osd pool create k8s 64 二.在k8s上操作: 1.安装客户端( ...