我正在构建一个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块中重试。