如何正确实现Spring+angularjs POST跨域提交

 我来答
育知同创教育
2017-07-11 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
服务端Server实现,添加header属性如下
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE");
response.addHeader("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");

PS:在SpringMVC框架中,需要将这段代码加入自定义filter中进行全局过滤处理,否则直接放在具体的业务controller可能会无效;另外在自定义interceptor添加这段代码也会无效,原因是跨域第一次OPTIONS预检请求在filter阶段就验证不通过,根据HttpServletRequest执行的顺序(listen->filter->servlet),interceptor类无法拦截OPTIONS请求。
前端angularjs实现POST跨域提交
var app = angular.module('app', []);
app.factory('requestInterceptor', ['$q', requestInterceptor]);
function HttpInterceptor($q) {
return {
request: function(config){
config.headers = config.headers || {};
config.headers['Authorization'] = "uShoSR0Oyy1bpgfZ/48VjyrnmjC3ALDv65KN+o+eQ04=";
return config || $q.when(config);
}
};
}
// 全局拦截器,跨域Post数据默认提交格式为application/x-www-form-urlencoded 通过拦截器修改为application/json
app.config(['$httpProvider', function($httpProvider){
$httpProvider.interceptors.push("requestInterceptor");
$httpProvider.defaults.headers.post['Content-Type'] = 'application/json';
}]);

app.controller('siteCtrl', function($scope, $http) {
$http({
method:'POST',
url:'http://localhost:8080/security/crossDomain',
data:{"biz":"biz100010"}
}).success(function(req){
console.log(req);
})
});

Spring Controller获取POST数据
@RequestMapping("/crossDomain")
@ResponseBody
public String crossDomain(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestBody) {
System.out.println("requestBody:" +requestBody);
return "success";
}

用注解@RequestBody的方式获取browser端提交的数据data,在这里使用request.getParameter("biz")的值为null.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式