我想使用jQuery POST方法来调用在Database.My xsaccess文件中进行一些修改的xsjs服务来阻止xsrf,所以我需要在我的控制器方法中处理它。
以下是我的控制器代码 -
var obj= {};
obj.name= "John";
obj.age= "abc@xyz.com";
obj.loc= "Minnesota";
jQuery.ajax({
url: "serviceTest.xsjs",
type: "GET",
data: JSON.stringify(obj),
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRF-Token", "Fetch");
},
success: function(responseToken, textStatus, XMLHttpRequest) {
var token = XMLHttpRequest.getResponseHeader('X-CSRF-Token');
console.log("token = " +token);
jQuery.ajax({
url: "serviceTest.xsjs",
type: "POST",
data: JSON.stringify(obj),
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRF-Token", token);
},
success : function(response) {
// will be called once the xsjs file sends a
response
console.log(response);
},
error : function(e) {
// will be called in case of any errors:
var errMsg = e.responseText
console.log(e);
}
});
},
这是我的xsjs代码 -
var csrf_token = $.request.headers.get("X-CSRF-Token");
if(csrf_token === "Fetch") {
var content = $.request.body.asString();
var args = $.parseJSON(content);
var xsName= args.name;
var xsemail= args.email;
var xsLoc= args.loc;
//then execute DML statement by passing these 3 parameters as arguments.
catch (error) {
$.response.setBody(content);
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
}
我无法进行更新并获得错误Err 500 - 内部服务器错误。 任何建议都会非常有用
答案 0 :(得分:0)
编辑:
如果我忘记了令牌,那么我得到403拒绝访问权限错误(“CSRF令牌验证失败”)而不是500内部。所以我觉得你的服务有问题
您可以在发布POST请求之前添加X-CSRF-Token作为POST请求的标头,并设置您的ajax请求。
$.ajaxSetup({
headers: {
'X-CSRF-Token': token
}
});
jQuery.ajax({
url: "serviceTest.xsjs",
type: "POST",
data: JSON.stringify(obj),
beforeSend: function(xhr) {
否则将其添加到每个POST请求中。
jQuery.ajax({
url: "serviceTest.xsjs",
type: "POST",
data: JSON.stringify(obj),
headers: {
'X-CSRF-Token': token
},
beforeSend: function(xhr) {
使用beforeSend事件的方式也应该有效。