ibm mobilefirst java适配器在存储用户数据时给出mfp conflict=concurrency failure

y4ekin9u  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(309)

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

@Override
            protected AuthenticatedUser createUser() {
                return new AuthenticatedUser(userId, logonId, this.getName(), attributes);
            }

 @Override
    protected boolean validateCredentials(Map<String, Object> credentials) {
        return false;
    }

在这个控件转到android应用程序之后,他们调用名为/updateclientregistrion的restapi,它将更新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 conflict=concurrency failure];正文={}
这个问题有什么解决办法吗?有人能帮我一下吗。接下来的教程:http://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/authentication-and-security/user-authentication/security-check/

6kkfgxo0

6kkfgxo01#

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

当并发请求尝试将属性存储到同一行或更新前该行中的数据被另一个请求修改时的结果。
这可能是因为请求被多次触发(非常接近),另一种可能是当一个请求处理内存中的数据时,另一个请求已经修改并更新了它。
代码应该在没有行的情况下仍然有效:

securityContext.storeClientRegistrationData(clientData);

试试看。
或者,把一个尝试捕捉周围的
storeclientregistrationdata(客户端数据)
然后在catch块中重试。

相关问题