0

我需要使用 Sencha Touch 2 app 中的一些服务器的 API。为了使用这个 API,我需要在服务器上进行身份验证。

所以我已经实现了登录功能:

Ext.Ajax.request({
            url: 'http://192.168.1.2:8080/spring-security-extjs-login/j_spring_security_check',
        method: 'POST',
        params: {
                j_username: 'rod',
                j_password: 'koala',
            },
            withCredentials: false,
            useDefaultXhrHeader: false,

            success: function(response){
                var text = response.responseText;
        Ext.Msg.alert("success", text, Ext.emptyFn);
            },

            failure: function(response){
                var text = response.responseText;
        Ext.Msg.alert('Error', text, Ext.emptyFn);
            }
});

但是我如何调用 API ,因为在身份验证后我尝试调用 API 但他们已经想要身份验证。可能我需要保存 JSESSIONID 并将其添加到另一个请求中,但我不知道该怎么做。

我不能使用 withCredentials: true ,所以我需要找到另一个解决方案。

如何从响应 HTTP Header 中获取 Set-Cookies ?

我在 Chrome 控制台中看到,响应标头中存在 JSESSIONID,所以,我需要得到它。

请帮我找到任何解决方案。

4

1 回答 1

1

您可以使用requestcomplete&beforerequest事件分别读取响应标头和写入请求标头。这是示例代码:

Ext.Ajax.on('requestcomplete', function(conn, response, options, eOpts){
    var respObj = Ext.JSON.decode(response.responseText);
    Helper.setSessionId(options.headers['JSESSIONID']);
}, this);

Ext.Ajax.on('beforerequest', function(conn, options, eOptions){
    options.headers['JSESSIONID'] = Helper.getSessionId();
}, this);
于 2013-06-17T06:19:34.043 回答