如何在UI5中处理jQuery POST的X-CSRF-Token?

时间:2016-09-07 16:41:41

标签: javascript jquery sapui5

我想使用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 - 内部服务器错误。 任何建议都会非常有用

1 个答案:

答案 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事件的方式也应该有效。