Worklight 应用程序提交大量导致 HTTP 401 的请求

Worklight App submits lots of requests which result into HTTP 401

我们的 Worklight 应用程序在 application-descriptor.xml 中定义了应用程序安全性。我们有挑战处理程序来处理挑战。在 wlCommonInit() 函数中,我们调用 WL.Client.Connect() 函数依次触发挑战处理程序。用户可以输入用户名/密码并成功验证。到目前为止一切都很好。

在成功验证后的质询处理程序中,我们调用 ChallengeHandler.submitSuccess() 方法来通知 worklight 关于成功的验证。

此调用应导致 WL.client.connect() onSuccess 回调函数,但它向 URL ../App/iphone/init 发出大量请求并返回 401。最终在 1-2 分钟后它获得 HTTP 200 用于特定请求,然后进入 onSuccess()

知道为什么这么多请求会导致 401 吗?

下面是代码片段,在 main.js...

            WL.Client.connect({
                onSuccess : callbackOnSuccess,
                onFailure : callbackOnFailure
            });

在challengeHandler.js..

$('#loginButton').bind('click', function () {
  var reqURL = '/j_security_check';
    var options = {};
    options.parameters = {
            j_username : $('#username').val(),
            j_password : $('#password').val()
    };
    options.headers = {};
    ChallengeHandler.submitLoginForm(reqURL, options, ChallengeHandler.submitLoginFormCallback);
});

ChallengeHandler.submitLoginFormCallback = function(response) {
        WASLTPARealmChallengeHandler.submitSuccess();
};

理论:

您有一个还是多个 MobileFirst Server?

  • 如果您只有一台服务器,使用 Wireshark 等工具获取网络流量日志会很有帮助
  • 如果你有多台服务器,那么你是否也碰巧有一个负载均衡器?

    为了成功通过身份验证,将有多个请求 - 第一个用于触发质询处理程序,第二个用于携带用户凭据。这些需要到达同一台服务器。

    如果负载均衡器配置错误,请求可能会到达不同的 MobileFirst 服务器。它确实听起来 就像请求在服务器之间反弹然后意味着身份验证请求命中一个服务器但凭据请求命中另一个...

    因此,如果有多个服务器,您需要确保在使用的负载均衡器中启用了 Sticky Sessions 选项