Jeesite删除用户后依然能登录解决办法

业务需求是这样的,系统里需要单独维护监理单位和监理单位人员,不在系统的组织机构里,但是单独维护的部分人员(如:监理经理)具备登陆的功能,在添加监理单位人员时需要同步添加到组织机构中,如图:红框中的内容是一致的
Jeesite删除用户后依然能登录解决办法_第1张图片
监理单位员工添加页面
Jeesite删除用户后依然能登录解决办法_第2张图片
系统用户添加页面
添加后的用户可以登陆系统,但是使用框架自带的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);
    }

Jeesite删除用户后依然能登录解决办法_第3张图片
这里没有通过,直接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);
    }

简单的一步操作就生效了

你可能感兴趣的:(使用jeesite难点记录)