我在使用Multiple Realm检查基于适配器的身份验证的安全性测试时遇到问题。 我在authenticationConfig.xml中有以下配置
<customSecurityTest name="RealmAdapter-securityTest">
<test isInternalUserID="true" realm="RealmAdapterRealm" step="1" mode="perRequest" />
<test realm="RealmAdapterRealm2" step="2" mode="perRequest"/>
</customSecurityTest>
</securityTests>
<realm name="RealmAdapterRealm" loginModule="MultipleRealmLoginModule">
<className>com.worklight.integration.auth.AdapterAuthenticator</className>
<parameter name="login-function" value="RealmAdapter.doLogin" />
<parameter name="logout-function" value="RealmAdapter.onLogout" />
</realm>
<realm name="RealmAdapterRealm2" loginModule="MultipleRealmLoginModule">
<className>com.worklight.integration.auth.AdapterAuthenticator</className>
<parameter name="login-function" value="RealmAdapter.getText" />
</realm>
<loginModule name="MultipleRealmLoginModule">
<className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
</loginModule>
问题只是第一个领域被召唤!在成功登录后我的RealmAdapterRealm的登录功能中,我正在设置用户会话对象并将authrequired返回到false。但我的第二个领域并没有被召集。如果我将step = 1和第一个域(RealmAdapterRealm)的第二个域(RealmAdapterRealm2)更改为step = 2,那么第一个域也正在工作.i.e RealmAdapterRealm2正在工作,RealmAdapterRealm永远不会被调用。 请帮助我实现这一目标,因为我是IBM Worklight的新手
答案 0 :(得分:2)
问题是您在两个领域都使用相同的登录模块。登录模块是维护用户身份的实体。在RealmAdapterRealm中进行身份验证后,MultipleRealmLoginModule会创建用户身份。然后auth框架检查您是否已经在RealmAdapterRealm2中进行了身份验证。此检查意味着转到RealmAdapterRealm2中定义的登录模块,并询问它是否已创建用户标识。而且,由于您在两个领域都使用了MultipleRealmLoginModule - 一旦您使用其中一个领域进行身份验证,两者都将具有用户身份。
解决方案是每个领域都有单独的登录模块。将MultipleRealmLoginModule克隆到MultipleRealmLoginModule2并在RealmAdapterRealm2中使用它。