我有基于网络的项目完全用jquery和js编写。在客户端,我通过像这样的ajax调用restful webservices
$.ajax({
type: 'GET',
timeout: 1000000000,
headers: { 'Access-Control-Allow-Origin': '*' },
url: serverName + '/getAlerts/',
data: {},
dataType: "text",
success: function (data) {
$scope.alerts = JSON.parse(data);
$scope.$apply();
},
error: function (data) {
alert(errServiceCall);
}
});
在服务器端,在Spring中创建了restful webservices。示例函数就是那样
@RequestMapping(value = "/services/getAlerts", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
@ResponseBody
public String getAlerts(HttpServletRequest request) throws JSONException, IOException, SQLException {
return "hello it's me";
}
在这种情况下,当我在 Chrome 上尝试使用该功能时,我收到以下错误
(索引):374拒绝连接 ' http://servername/services/getAlerts/'因为它违反了 遵循内容安全政策指令:" connect-src' self'"。
如果我将完整的网址(http://servername/services/getAlerts)粘贴到Chrome地址栏中,则会成功返回结果。
我建议关于CORS(跨源资源共享),所以我添加了代码
headers: { 'Access-Control-Allow-Origin': '*' },
在我的ajax代码块中。但它没有奏效。
所以我试着在服务器端的函数上面添加@CrossOrigin参数,就像那样
@CrossOrigin
@RequestMapping(value = "/services/getAlerts", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
@ResponseBody
public String getAlerts(HttpServletRequest request) throws JSONException, IOException, SQLException {
return "hello it's me";
}
但在这种情况下,我在编译时收到以下错误(Java版本1.6 +春季版本4.3.12)
注释org.springframework.web.bind.annotation.CrossOrigin是 失踪< clinit>
如何以最短的方式解决CORS问题?
P.S:当我从互联网选项打开CORS时,所有过程在IE中完美运行 - >安全 - >自定义级别 - >其他 - >跨域访问数据源(设置启用)
答案 0 :(得分:1)
我将以下代码添加到unix WAS请求服务器中的virtualhost配置文件中,该服务器包含在spring框架中创建的restful webservices,它解决了我的问题。现在没有任何浏览器配置,我可以在客户端调用ajax函数而不会出现CORS问题。
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token, x-csrftoken"
Header always set Access-Control-Allow-Credentials "true"
如果您想深入了解该配置,可以访问that page这很有帮助。
答案 1 :(得分:0)
你添加了
吗?$.ajax({
....
xhrFields: {withCredentials: true},
....
}
在ajax方法中