MFP V8.0 检查用户是否已经登录
Check if user is already logged in or or not in MFP V8.0
我在MFP V8.0中写了一个适配程序。此过程通过安全检查得到保护。我想在调用此适配器过程之前检查用户是否已经登录:
过程映射到范围如下:
<procedure name="searchData" scope="restrictedResource"/>
安全检查定义如下:
<securityCheckDefinition name="UserValidationSecurityCheck" class="com.sample.UserValidationSecurityCheck">
我也完成了映射服务器的范围元素。
我写了下面调用适配器方法的方法:
function callAdapterProcedure(invocationData){
var procedureName = invocationData.procedure;
var successHandler = invocationData.successHandler;
var failureHandler = invocationData.failureHandler;
var parameters = invocationData.parameters;
var isuserLoggedIn = checkForLoggedInUser();
alert('is logged in' + isuserLoggedIn);
if(isuserLoggedIn){
var dataRequest = new WLResourceRequest(getAdapterPath(procedureName), WLResourceRequest.GET);
dataRequest.setQueryParameter("params", [JSON.stringify(parameters)]);
dataRequest.send().then(successHandler,failureHandler);
}else{
hideProgressBar();
showAlert(Messages.ALERT_SESSION_TIME_OUT);
logoutWithoutConfirmation();
openLogin();
}
}
下面是checkForLoggedInUser()
方法的实现:
function checkForLoggedInUser(){
var userAlreadyLoggedIn = undefined;//WL.Client.isUserAuthenticated(mrmGlobal.realms.authenticationRealm,null);
WLAuthorizationManager.obtainAccessToken("restrictedResource").then(
function (accessToken) {
alert("obtainAccessToken onSuccess");
userAlreadyLoggedIn = true;
},
function (response) {
alert("obtainAccessToken onFailure: " + JSON.stringify(response));
userAlreadyLoggedIn = false;
});
return userAlreadyLoggedIn;
}
我知道 WLAuthorizationManager.obtainAccessToken
向服务器发送异步调用,这就是为什么 userAlreadyLoggedIn
总是以 undefined
的形式出现。在进行适配器调用之前,有什么方法可以检查用户会话是否超时?基本上我想实现类似 WL.Client.isUserAuthenticated
的东西(在早期版本中就有)。
--更新--
此外,我还观察到另一件事,即 WLAuthorizationManager.obtainAccessToken
的处理程序方法也没有被调用。
来自您的代码:
WLAuthorizationManager.obtainAccessToken("restrictedResource").then(
function (accessToken) {
alert("obtainAccessToken onSuccess");
userAlreadyLoggedIn = true;
},
function (response) {
alert("obtainAccessToken onFailure: " + JSON.stringify(response));
userAlreadyLoggedIn = false;
});
认为 obtainAccessToken's onFailure
表示用户未登录是一种常见的误解。但事实并非如此。
当您调用 obtainAccessToken
时,有 3 种可能的结果:
- 成功:用户登录,
obtainAccessToken onSuccess
被调用(连同质询处理程序的成功方法)。
- 挑战:用户未登录,安全检查向客户端发送了挑战。 您的挑战处理者将收到此挑战。
obtain
将保持等待状态,直到您回答挑战。 这可能是您的情况,这无法解释为什么 none 的 obtain 处理程序被调用。
- 失败:身份验证过程中出现问题。可能是服务器宕机、网络问题、作用域不存在、用户被屏蔽等。在这种情况下,将调用
obtainAccessToken's onFailure
。
目前没有API检查是否在不触发质询的情况下授予范围。我已经打开了一个内部功能请求,请随时提交您自己的 (https://www.ibm.com/developerworks/rfe)。
同时,您可以添加自己的内部布尔标志,在您登录时设置为 true,在注销时设置为 false。
我在MFP V8.0中写了一个适配程序。此过程通过安全检查得到保护。我想在调用此适配器过程之前检查用户是否已经登录:
过程映射到范围如下:
<procedure name="searchData" scope="restrictedResource"/>
安全检查定义如下:
<securityCheckDefinition name="UserValidationSecurityCheck" class="com.sample.UserValidationSecurityCheck">
我也完成了映射服务器的范围元素。
我写了下面调用适配器方法的方法:
function callAdapterProcedure(invocationData){
var procedureName = invocationData.procedure;
var successHandler = invocationData.successHandler;
var failureHandler = invocationData.failureHandler;
var parameters = invocationData.parameters;
var isuserLoggedIn = checkForLoggedInUser();
alert('is logged in' + isuserLoggedIn);
if(isuserLoggedIn){
var dataRequest = new WLResourceRequest(getAdapterPath(procedureName), WLResourceRequest.GET);
dataRequest.setQueryParameter("params", [JSON.stringify(parameters)]);
dataRequest.send().then(successHandler,failureHandler);
}else{
hideProgressBar();
showAlert(Messages.ALERT_SESSION_TIME_OUT);
logoutWithoutConfirmation();
openLogin();
}
}
下面是checkForLoggedInUser()
方法的实现:
function checkForLoggedInUser(){
var userAlreadyLoggedIn = undefined;//WL.Client.isUserAuthenticated(mrmGlobal.realms.authenticationRealm,null);
WLAuthorizationManager.obtainAccessToken("restrictedResource").then(
function (accessToken) {
alert("obtainAccessToken onSuccess");
userAlreadyLoggedIn = true;
},
function (response) {
alert("obtainAccessToken onFailure: " + JSON.stringify(response));
userAlreadyLoggedIn = false;
});
return userAlreadyLoggedIn;
}
我知道 WLAuthorizationManager.obtainAccessToken
向服务器发送异步调用,这就是为什么 userAlreadyLoggedIn
总是以 undefined
的形式出现。在进行适配器调用之前,有什么方法可以检查用户会话是否超时?基本上我想实现类似 WL.Client.isUserAuthenticated
的东西(在早期版本中就有)。
--更新--
此外,我还观察到另一件事,即 WLAuthorizationManager.obtainAccessToken
的处理程序方法也没有被调用。
来自您的代码:
WLAuthorizationManager.obtainAccessToken("restrictedResource").then(
function (accessToken) {
alert("obtainAccessToken onSuccess");
userAlreadyLoggedIn = true;
},
function (response) {
alert("obtainAccessToken onFailure: " + JSON.stringify(response));
userAlreadyLoggedIn = false;
});
认为 obtainAccessToken's onFailure
表示用户未登录是一种常见的误解。但事实并非如此。
当您调用 obtainAccessToken
时,有 3 种可能的结果:
- 成功:用户登录,
obtainAccessToken onSuccess
被调用(连同质询处理程序的成功方法)。 - 挑战:用户未登录,安全检查向客户端发送了挑战。 您的挑战处理者将收到此挑战。
obtain
将保持等待状态,直到您回答挑战。 这可能是您的情况,这无法解释为什么 none 的 obtain 处理程序被调用。 - 失败:身份验证过程中出现问题。可能是服务器宕机、网络问题、作用域不存在、用户被屏蔽等。在这种情况下,将调用
obtainAccessToken's onFailure
。
目前没有API检查是否在不触发质询的情况下授予范围。我已经打开了一个内部功能请求,请随时提交您自己的 (https://www.ibm.com/developerworks/rfe)。
同时,您可以添加自己的内部布尔标志,在您登录时设置为 true,在注销时设置为 false。