Worklight 6.0 Android 混合应用程序不会进入登录页面
Posted
技术标签:
【中文标题】Worklight 6.0 Android 混合应用程序不会进入登录页面【英文标题】:Worklight 6.0 Android Hybrid Application not going to the login page 【发布时间】:2014-07-11 10:12:58 【问题描述】:我们使用 worklight 6.0 为 android 开发了一个混合应用程序。
应用程序调用需要基于表单的身份验证的查询。 设备身份验证和工作灯身份验证也用于应用程序中。
调用查询时,应用程序将使用 Web 服务调用 Worklight 服务器并将登录页面 html 作为响应传递 - 这在 Android 设备中不起作用,因为响应没有到达应用程序并且应用程序在超时后挂起,无法重定向到登录页面。
我们正在使用服务器级别的身份验证,其中 WebSphere 与 LDAP 集成。 使用 LDAP 成功进行用户身份验证,并且会话通过身份验证。通过针对 XSRF、远程禁用等的预定义 Worklight 安全测试来保护资源。
还通过设备自动配置和应用程序身份验证保护资源。一旦用户通过 LDAP 进行身份验证,设备身份验证将失败并且应用程序挂起
相同的应用程序在 ios 中运行良好。
日志
07-10 19:45:13.241: I/chromium(25549): [INFO:CONSOLE(978)] "processMessage failed: Stack: TypeError: undefined is not a function
07-10 19:45:13.241: I/chromium(25549): at invokeProcedure (file:///data/data/com.MOIKuwait/files/www/default/wlclient/js/wlclient.js:1686:23)
07-10 19:45:13.241: I/chromium(25549): at file:///data/data/com.MOIKuwait/files/www/default/js/common.js:2737:40
07-10 19:45:13.241: I/chromium(25549): at captureReturnValue (file:///data/data/com.MOIKuwait/files/www/default/wlclient/js/cordova.js:852:20)
07-10 19:45:13.241: I/chromium(25549): at Object.cordova.callbackFromNative (file:///data/data/com.MOIKuwait/files/www/default/wlclient/js/cordova.js:293:54)
07-10 19:45:13.241: I/chromium(25549): at processMessage (file:///data/data/com.MOIKuwait/files/www/default/wlclient/js/cordova.js:971:21)
07-10 19:45:13.241: I/chromium(25549): at Function.androidExec.processMessages (file:///data/data/com.MOIKuwait/files/www/default/wlclient/js/cordova.js:1009:17)
07-10 19:45:13.241: I/chromium(25549): at Object.androidExec [as exec] (file:///data/data/com.MOIKuwait/files/www/default/wlclient/js/cordova.js:861:21)
07-10 19:45:13.241: I/chromium(25549): at WL.Device.getNetworkInfo (file:///data/data/com.MOIKuwait/files/www/default/wlclient/js/wlgap.android.js:1251:13)
07-10 19:45:13.241: I/chromium(25549): at inquireVisaApplicationStatus (file:///data/data/com.MOIKuwait/files/www/default/js/common.js:2726:15)
07-10 19:45:13.241: I/chromium(25549): at validateAppNumber (file:///data/data/com.MOIKuwait/files/www/default/js/common.js:680:3)", source: file:///data/data/com.MOIKuwait/files/www/default/wlclient/js/cordova.js (978)
authenticationConfig.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<tns:loginConfiguration xmlns:tns="http://www.worklight.com/auth/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<securityTests>
<mobileSecurityTest name="WASTest-securityTest">
<testAppAuthenticity />
<testDeviceId provisioningType="none" />
<testUser realm="WASLTPARealm" />
</mobileSecurityTest>
<mobileSecurityTest name="PushNotificationSecurityTest">
<testAppAuthenticity />
<testDeviceId provisioningType="none" />
<testUser realm="PushRealm" />
</mobileSecurityTest>
</securityTests>
<realms>
<realm loginModule="WASLTPAModule" name="WASLTPARealm">
<className>com.worklight.core.auth.ext.WebSphereFormBasedAuthenticator</className>
<parameter name="login-page" value="/login.html" />
<parameter name="error-page" value="/loginError.html" />
</realm>
<realm name="PushRealm" loginModule="HeaderLoginModule">
<className>com.worklight.core.auth.ext.HeaderAuthenticator</className>
</realm>
</realms>
<loginModules>
<loginModule name="WASLTPAModule">
<className>com.worklight.core.auth.ext.WebSphereLoginModule</className>
</loginModule>
<loginModule name="HeaderLoginModule">
<className>com.worklight.core.auth.ext.HeaderLoginModule</className>
<parameter name="user-name-header" value="userid" />
</loginModule>
</loginModules>
</tns:loginConfiguration>
调用适配器
if(networkInfo.isNetworkConnected == "true")
var invocationData =
adapter : 'EnquiryServicesAdapter',
procedure : 'inquirePassportData',
parameters : [ UserUID ]
;
WL.Client.invokeProcedure(invocationData,
onSuccess : successPassportResponse,
onFailure : failPassportResponse,
timeout : requestTimeout
);
EnquriyServiceAdapter.js
<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed Materials - Property of IBM 5725-G92 (C) Copyright IBM Corp.
2011, 2013. All Rights Reserved. US Government Users Restricted Rights -
Use, duplication or disclosure restricted by GSA ADP Schedule Contract with
IBM Corp. -->
<wl:adapter name="EnquiryServicesAdapter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wl="http://www.worklight.com/integration" xmlns:http="http://www.worklight.com/integration/http">
<displayName>EnquiryServicesAdapter</displayName>
<description>EnquiryServicesAdapter</description>
<connectivity>
<connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
<protocol>http</protocol>
<domain>localhost</domain>
<port>9080</port>
<!-- Following properties used by adapter's key manager for choosing specific
certificate from key store <sslCertificateAlias></sslCertificateAlias> <sslCertificatePassword></sslCertificatePassword> -->
</connectionPolicy>
<loadConstraints maxConcurrentConnectionsPerNode="2" />
</connectivity>
<procedure name="inquirePassportData" securityTest="WASTest-securityTest" />
</wl:adapter>
EnquiryServicesAdapter-impl
function inquirePassportData(userId)
var instance = com.worklight.service.PassportEnquiryService.getInstance();
var sessionInstance = WL.Server.getActiveUser('WASLTPARealm');
WL.Logger.info(sessionInstance.userId);
return
response : instance.getEnquiryDetails(sessionInstance.userId)
;
【问题讨论】:
去掉inquirePassportData过程的安全测试是否有效? 另外,只是为了检查一下,你有没有实际实现的功能successPassportResponse和failPassportResponse? 【参考方案1】:根据您的日志,wlclient 期望获得一个函数,但收到一个未定义的函数。调用来自 common.js,第 2737 行。此文件是您的应用程序代码。我会在那里放一个断点并检查发生了什么。很难说没有看到那部分代码。
您可以在此处阅读有关调试在 Android 上运行的 JS 代码的更多信息 - https://developer.chrome.com/devtools/docs/remote-debugging
【讨论】:
以上是关于Worklight 6.0 Android 混合应用程序不会进入登录页面的主要内容,如果未能解决你的问题,请参考以下文章
IBM Worklight 6.0 - 无法在 avd 上使用适用于 android 环境的 dojo 工具包运行示例混合 Worklight 应用程序?
IBM Worklight 6.0 - 启用控制台登录身份验证后混合端口号?
IBM Worklight 6.0 - 使用 Web 服务的混合应用程序无法在实际设备上运行?
IBM Worklight 6.0 - 在加载框架库和 css 时,在混合应用程序(使用 Dojo 工具包 1.9)中获得了明显的亮点?
将 windows phone 8.0 phonegap 应用程序从 worklight 6.0 移动到 worklight 6.1