IBM MobilFirst JAVA适配器在存储用户数据时出现MFP冲突=并发故障



我正在构建一个JAVA HTTP适配器,我正在UserAuthenticationSecurityCheck类中使用以下方法对用户进行身份验证

@Override
protected AuthenticatedUser createUser() {
return new AuthenticatedUser(userId, logonId, this.getName(), attributes);
}
@Override
protected boolean validateCredentials(Map<String, Object> credentials) {
return false;
}

此控制进入安卓应用程序后,他们调用名为/updateClientRegistration的REST API,该API将更新ClientRegistrationData

@GET
public Response updateClientRegistartion(@Context HttpServletRequest request) {
AuthenticatedUser authUser = securityContext.getAuthenticatedUser();
Map<String, Object> attributes = authUser.getAttributes();
ClientData clientData = securityContext.getClientRegistrationData();
clientData.getProtectedAttributes().put(some parameter);
if (clientData.getClientId() != null) {
securityContext.storeClientRegistrationData(clientData);
} 

但这个代码给我的错误就像


异常消息:409;headers=[MFP冲突=并发故障];body={}


这个问题有解决方案吗?有人能帮我做这个吗。遵循的教程:http://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/authentication-and-security/user-authentication/security-check/

409; headers=[ MFP-Conflict=Concurrency failure]; body={}

当并发请求试图将属性存储到同一行中,或者在更新之前另一个请求正在修改行中的数据时,会产生结果。

这可能是由于请求被多次激发(非常接近(。另一种可能性是,当一个请求处理内存中的数据时,另一个请求已经修改并更新了它。

代码应该仍然可以在没有以下行的情况下工作:

securityContext.storeClientRegistrationData(clientData);

试试看。

或者,在周围尝试捕获

storeClientRegistrationData(clientData(

并在catch块中重试。

最新更新