业务需求是这样的,系统里需要单独维护监理单位和监理单位人员,不在系统的组织机构里,但是单独维护的部分人员(如:监理经理)具备登陆的功能,在添加监理单位人员时需要同步添加到组织机构中,如图:红框中的内容是一致的
监理单位员工添加页面
系统用户添加页面
添加后的用户可以登陆系统,但是使用框架自带的systemService.deleteUser(user);删除掉用户之后,依然能够登陆系统,这里贴出修改前的代码
@Transactional(readOnly = false)
public void delete(SupervisionUnitEmp supervisionUnitEmp){
String id = supervisionUnitEmp.getUserId();//监理单位人员的登陆id
if(StringUtils.isNotBlank(id)){
User user = new User();
user.setId(id);//登陆id赋值给user对象
systemService.deleteUser(user);//调用删除用户的方法
}
super.delete(supervisionUnitEmp);
}
tomcat重启之后就不可以登陆了,原因是因为缓存没有清除,systemService.deleteUser(user);里面的代码全部打上断点一步步试,发现问题出在这里
//System.deleteUser(User user)方法
@Transactional(readOnly = false)
public void deleteUser(User user) {
userDao.delete(user);
// 同步到Activiti
deleteActivitiUser(user);
// 清除用户缓存
UserUtils.clearCache(user);
// // 清除权限缓存
// systemRealm.clearAllCachedAuthorizationInfo();
}
//deleteActivitiUser(User user)方法
private void deleteActivitiUser(User user) {
if (!Global.isSynActivitiIndetity()){
return;
}
if(user!=null) {
String userId = user.getLoginName();//ObjectUtils.toString(user.getId());
identityService.deleteUser(userId);
}
}
//isSynActivitiIndetity()方法
/* 在修改系统用户和角色时是否同步到Activiti
*/
public static Boolean isSynActivitiIndetity() {
String dm = getConfig("activiti.isSynActivitiIndetity");
return "true".equals(dm) || "1".equals(dm);
}
这里没有通过,直接return了
后来通过检查代码,发现了导致这个问题的原因,竟然是因为删除的user只传入了id,并没有调出用户的完整信息,修改后的代码如下:
@Transactional(readOnly = false)
public void delete(SupervisionUnitEmp supervisionUnitEmp){
String id = supervisionUnitEmp.getUserId();
if(StringUtils.isNotBlank(id)){
User user = UserUtils.get(id);//通过id查询出来user的完整信息
systemService.deleteUser(user);
}
super.delete(supervisionUnitEmp);
}
简单的一步操作就生效了