【问题标题】:j_security_check not found worklightj_security_check 未找到工作灯
【发布时间】:2014-07-11 16:59:38
【问题描述】:

我正在尝试使用带有 Worklight 的 LDAP 模块对我的应用程序用户进行身份验证。 这与此客户端代码配合得很好:

var ldapRealmChallengeHandler = WL.Client.createChallengeHandler("LDAPRealm");

function wlCommonInit(){
    WL.Client.login("LDAPRealm");
}

ldapRealmChallengeHandler.isCustomResponse = function(response) {
if (!response || response.responseText === null) {
    return false;
}
var indicatorIdx = response.responseText.search('j_security_check');

if (indicatorIdx >= 0){
    return true;
}  
return false;
};


ldapRealmChallengeHandler.handleChallenge = function(response){
};

ldapRealmChallengeHandler.submitLoginFormCallback = function(response) {
    var isLoginFormResponse = ldapRealmChallengeHandler.isCustomResponse(response);
    if (isLoginFormResponse){
        ldapRealmChallengeHandler.handleChallenge(response);
    } 
    else {
        ldapRealmChallengeHandler.submitSuccess();
        window.location.hash = "classes";
    }
};

submitLoginForm = function(username, password){
        var reqURL = '/j_security_check';
        var options = {};
        options.parameters = {
            j_username : username,
            j_password : password
        };
        options.headers = {};
        ldapRealmChallengeHandler.submitLoginForm(reqURL, options,   ldapRealmChallengeHandler.submitLoginFormCallback);
    }

logout = function(){
    WL.Client.logout('LDAPRealm',{});
    changePage(loginPage);
}

当我第一次登录时,它运行良好。但是,如果我注销并尝试再次登录,则会出现错误:“找不到文件:/apps/services/j_security_check”。

我尝试了几件事:

  1. 我在 Worklight 入门网站上获取了代码示例。他们有以下代码来注销: WL.Client.logout('LDAPRealm',{onSuccess: WL.Client.reloadApp})。 如果我删除 WL.Client.reloadApp 部分,则会出现与我相同的问题:“/apps/services/j_security_check”。

  2. 我在调用服务器之前将 WL.Client.login("LDAPRealm") 放在了 submitForm 中,但它不起作用。

为什么会出现这个问题? 重新加载整个应用程序是解决问题的唯一方法吗?因为它不是真正的时间效率......

非常感谢您的帮助。

【问题讨论】:

  • 只检查用户会话是否已经过验证?在第二次使用WL.Client.isUserAuthenticated("LDAPRealm") 登录时,如果在注销后通过身份验证也意味着您的注销有问题。此外,每当您提交没有挑战的表单时,您都会收到错误“找不到文件:/apps/services/j_security_check”。
  • 其实注销后WL.Client.isUserAuthenticated("LDAPRealm")的值为true。但是,当我注销时,我的应用程序从服务器收到了一个成功事件,所以我不知道我能做什么......我找到的所有解决方案都是完全重新加载应用程序,但我更喜欢其他解决方案......
  • 你是在通过调用WL.Server.setActiveUser("LDAPRealm", null);清除活跃用户
  • 我需要在哪里调用这个函数?如果我在客户端调用它,我有一个错误:WL.Server is undefined
  • 您必须在注销功能适配器中使用它。 ASAIK 您需要使用自定义登录模块才能使用它。请参阅此 SO question 了解更多信息。

标签: authentication ibm-mobilefirst j-security-check


【解决方案1】:

您应该执行 WL.Client.connect 而不是 WL.Client.login。您正在尝试登录,而您尚未受到挑战。

【讨论】:

  • 我已将connectOnStartup 属性放在initOptions.js 文件中的true,所以通常我不必调用WL.Client.connect。是真的吗?
猜你喜欢
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 2012-05-30
  • 2012-04-12
  • 2019-02-12
  • 1970-01-01
  • 2018-05-13
  • 2015-07-26
相关资源
最近更新 更多