问题现象:
1、用户反馈工作流操作人和实际流程设置人员不一致,导致出现数据错乱问题
问题1:评论人为空(act_hi_comment表user_id为空)
由源码知用户userId是通过Authentication.getAuthenticatedUserId();进行获取,那么出现null或者空的情况我们可以手动的设置为所使用的用户ID
String userId = Authentication.getAuthenticatedUserId();
CommentEntity comment = new CommentEntity();
comment.setUserId(userId);
comment.setType( (type == null)? CommentEntity.TYPE_COMMENT : type );
comment.setTime(commandContext.getProcessEngineConfiguration().getClock().getCurrentTime());
comment.setTaskId(taskId);
comment.setProcessInstanceId(processInstanceId);
comment.setAction(Event.ACTION_ADD_COMMENT);
设置方式有两种:
Authentication.setAuthenticatedUserId();//activiti内部设置用户方法
或
identityService.setAuthenticatedUserId(userId);//外部开放设置API
问题2:评论人设置后,人员信息混乱或错误
经过设置上述人员之后,userId是不为空了,但是出现了异常错乱的情况。继续剖析源码
package org.activiti.engine.impl.identity;
/**
* @author Tom Baeyens
*/
public abstract class Authentication {
static ThreadLocal<String> authenticatedUserIdThreadLocal = new ThreadLocal<String>();
public static void setAuthenticatedUserId(String authenticatedUserId) {
authenticatedUserIdThreadLocal.set(authenticatedUserId);
}
public static String getAuthenticatedUserId() {
return authenticatedUserIdThreadLocal.get();
}
}
由此可以看出,用户ID是存储在ThreadLocal内,