mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
权限问题修复:executor、report权限缓存清空感知补充
This commit is contained in:
+5
@@ -11,4 +11,9 @@ public class RedisKeyConstants {
|
|||||||
* 生产单导入
|
* 生产单导入
|
||||||
*/
|
*/
|
||||||
public static final String ORDER_IMPORT_LOCK_KEY = "order_import:%s";
|
public static final String ORDER_IMPORT_LOCK_KEY = "order_import:%s";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 刷新权限
|
||||||
|
*/
|
||||||
|
public static final String PERMISSION_REFRESH = "PERMISSION_REFRESH";
|
||||||
}
|
}
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package com.cf.imes.module.executor.dal.redis.listener;
|
||||||
|
|
||||||
|
import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisSimpleMessageListener;
|
||||||
|
import com.cf.imes.framework.redis.constants.RedisKeyConstants;
|
||||||
|
import com.cf.imes.framework.security.core.service.SecurityFrameworkService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.data.redis.connection.Message;
|
||||||
|
import org.springframework.data.redis.listener.ChannelTopic;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* executor PERMISSION_REFRESH redis监听器
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/6/13 10:32
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class ExecutorPermissionRefreshRedisListener extends AbstractRedisSimpleMessageListener {
|
||||||
|
|
||||||
|
private final SecurityFrameworkService securityFrameworkService;
|
||||||
|
|
||||||
|
public ExecutorPermissionRefreshRedisListener(SecurityFrameworkService securityFrameworkService) {
|
||||||
|
super.setTopic(new ChannelTopic(RedisKeyConstants.PERMISSION_REFRESH));
|
||||||
|
this.securityFrameworkService = securityFrameworkService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(Message message, byte[] bytes) {
|
||||||
|
log.info("[SystemPermissionRefreshRedisListener][onMessage][{}收到刷新本地权限缓存]", message);
|
||||||
|
securityFrameworkService.invalidateAllPermissionsCache();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -166,6 +166,12 @@
|
|||||||
<version>${itextpdf.version}</version>
|
<version>${itextpdf.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--ureport-core 相关end-->
|
<!--ureport-core 相关end-->
|
||||||
|
|
||||||
|
<!-- 消息队列相关 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.cf.imes</groupId>
|
||||||
|
<artifactId>cf-spring-boot-starter-mq</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<!-- 设置构建的 jar 包名 -->
|
<!-- 设置构建的 jar 包名 -->
|
||||||
@@ -232,6 +238,10 @@
|
|||||||
<groupId>com.cf.imes</groupId>
|
<groupId>com.cf.imes</groupId>
|
||||||
<artifactId>cf-spring-boot-starter-web</artifactId>
|
<artifactId>cf-spring-boot-starter-web</artifactId>
|
||||||
</include>
|
</include>
|
||||||
|
<include>
|
||||||
|
<groupId>com.cf.imes</groupId>
|
||||||
|
<artifactId>cf-spring-boot-starter-mq</artifactId>
|
||||||
|
</include>
|
||||||
</includes>
|
</includes>
|
||||||
</configuration>
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package com.cf.imes.module.report.dal.redis.listener;
|
||||||
|
|
||||||
|
import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisSimpleMessageListener;
|
||||||
|
import com.cf.imes.framework.redis.constants.RedisKeyConstants;
|
||||||
|
import com.cf.imes.framework.security.core.service.SecurityFrameworkService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.data.redis.connection.Message;
|
||||||
|
import org.springframework.data.redis.listener.ChannelTopic;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* report PERMISSION_REFRESH redis监听器
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/6/13 10:32
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class ReportPermissionRefreshRedisListener extends AbstractRedisSimpleMessageListener {
|
||||||
|
|
||||||
|
private final SecurityFrameworkService securityFrameworkService;
|
||||||
|
|
||||||
|
public ReportPermissionRefreshRedisListener(SecurityFrameworkService securityFrameworkService) {
|
||||||
|
super.setTopic(new ChannelTopic(RedisKeyConstants.PERMISSION_REFRESH));
|
||||||
|
this.securityFrameworkService = securityFrameworkService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(Message message, byte[] bytes) {
|
||||||
|
log.info("[SystemPermissionRefreshRedisListener][onMessage][{}收到刷新本地权限缓存]", message);
|
||||||
|
securityFrameworkService.invalidateAllPermissionsCache();
|
||||||
|
}
|
||||||
|
}
|
||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
package com.cf.imes.module.system.dal.redis;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* system redis监听刷新通道名称 常量
|
|
||||||
*
|
|
||||||
* @author Gqr
|
|
||||||
* @since 2024/6/13 14:55
|
|
||||||
*/
|
|
||||||
public class RedisRefreshChannelTopicConstants {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 刷新权限
|
|
||||||
*/
|
|
||||||
public static final String PERMISSION_REFRESH = "PERMISSION_REFRESH";
|
|
||||||
}
|
|
||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
package com.cf.imes.module.system.dal.redis.listener;
|
package com.cf.imes.module.system.dal.redis.listener;
|
||||||
|
|
||||||
import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisSimpleMessageListener;
|
import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisSimpleMessageListener;
|
||||||
|
import com.cf.imes.framework.redis.constants.RedisKeyConstants;
|
||||||
import com.cf.imes.framework.security.core.service.SecurityFrameworkService;
|
import com.cf.imes.framework.security.core.service.SecurityFrameworkService;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.data.redis.connection.Message;
|
import org.springframework.data.redis.connection.Message;
|
||||||
import org.springframework.data.redis.listener.ChannelTopic;
|
import org.springframework.data.redis.listener.ChannelTopic;
|
||||||
@@ -21,7 +21,7 @@ public class SystemPermissionRefreshRedisListener extends AbstractRedisSimpleMes
|
|||||||
private final SecurityFrameworkService securityFrameworkService;
|
private final SecurityFrameworkService securityFrameworkService;
|
||||||
|
|
||||||
public SystemPermissionRefreshRedisListener(SecurityFrameworkService securityFrameworkService) {
|
public SystemPermissionRefreshRedisListener(SecurityFrameworkService securityFrameworkService) {
|
||||||
super.setTopic(new ChannelTopic(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH));
|
super.setTopic(new ChannelTopic(RedisKeyConstants.PERMISSION_REFRESH));
|
||||||
this.securityFrameworkService = securityFrameworkService;
|
this.securityFrameworkService = securityFrameworkService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -9,7 +9,6 @@ import com.cf.imes.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
|
|||||||
import com.cf.imes.module.system.dal.dataobject.permission.MenuDO;
|
import com.cf.imes.module.system.dal.dataobject.permission.MenuDO;
|
||||||
import com.cf.imes.module.system.dal.mysql.permission.MenuMapper;
|
import com.cf.imes.module.system.dal.mysql.permission.MenuMapper;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants;
|
|
||||||
import com.cf.imes.module.system.enums.permission.MenuTypeEnum;
|
import com.cf.imes.module.system.enums.permission.MenuTypeEnum;
|
||||||
import com.cf.imes.module.system.service.organ.OrganService;
|
import com.cf.imes.module.system.service.organ.OrganService;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
@@ -160,9 +159,9 @@ public class MenuServiceImpl implements MenuService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 清空本地缓存
|
// 清空本地缓存
|
||||||
redisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
|
redisTemplate.convertAndSend(com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, "");
|
||||||
}).exceptionally(e -> {
|
}).exceptionally(e -> {
|
||||||
log.error("[deleteMenu] redis 清空PERMISSION_MENU_ID_LIST或message发送失败, topic:{}, 异常:{}", RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, e);
|
log.error("[deleteMenu] redis 清空PERMISSION_MENU_ID_LIST或message发送失败, topic:{}, 异常:{}", com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, e);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-7
@@ -29,7 +29,6 @@ import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO;
|
|||||||
import com.cf.imes.module.system.dal.mysql.permission.RoleMenuMapper;
|
import com.cf.imes.module.system.dal.mysql.permission.RoleMenuMapper;
|
||||||
import com.cf.imes.module.system.dal.mysql.permission.UserRoleMapper;
|
import com.cf.imes.module.system.dal.mysql.permission.UserRoleMapper;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants;
|
|
||||||
import com.cf.imes.module.system.enums.ErrorCodeConstants;
|
import com.cf.imes.module.system.enums.ErrorCodeConstants;
|
||||||
import com.cf.imes.module.system.enums.permission.DataScopeEnum;
|
import com.cf.imes.module.system.enums.permission.DataScopeEnum;
|
||||||
import com.cf.imes.module.system.service.dept.DeptService;
|
import com.cf.imes.module.system.service.dept.DeptService;
|
||||||
@@ -255,7 +254,7 @@ public class PermissionServiceImpl implements PermissionService {
|
|||||||
log.info("[assignRoleMenu] 批量删除redis[{}]数量:{}", patternKey, batchDelNum);
|
log.info("[assignRoleMenu] 批量删除redis[{}]数量:{}", patternKey, batchDelNum);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
stringRedisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
|
stringRedisTemplate.convertAndSend(com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, "");
|
||||||
})
|
})
|
||||||
.thenRunAsync(() -> {
|
.thenRunAsync(() -> {
|
||||||
// 清空角色下用户的token缓存
|
// 清空角色下用户的token缓存
|
||||||
@@ -508,9 +507,9 @@ public class PermissionServiceImpl implements PermissionService {
|
|||||||
log.info("[batchAssignRoleUsers] 批量删除redis[{}]数量:{}", patternKey, batchDelNum);
|
log.info("[batchAssignRoleUsers] 批量删除redis[{}]数量:{}", patternKey, batchDelNum);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
stringRedisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
|
stringRedisTemplate.convertAndSend(com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, "");
|
||||||
}).exceptionally(e -> {
|
}).exceptionally(e -> {
|
||||||
log.error("[batchAssignRoleUsers] redis 清空USER_ROLE_ID_LIST或message发送失败, topic:{}, 异常:{}", RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, e);
|
log.error("[batchAssignRoleUsers] redis 清空USER_ROLE_ID_LIST或message发送失败, topic:{}, 异常:{}", com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, e);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -590,9 +589,9 @@ public class PermissionServiceImpl implements PermissionService {
|
|||||||
CompletableFuture.runAsync(() -> {
|
CompletableFuture.runAsync(() -> {
|
||||||
// 移除redis中的缓存
|
// 移除redis中的缓存
|
||||||
stringRedisTemplate.delete(String.format(String.valueOf(new StringBuffer(RedisKeyConstants.USER_ROLE_ID_LIST).append(":%s:%s")), organId, userId));
|
stringRedisTemplate.delete(String.format(String.valueOf(new StringBuffer(RedisKeyConstants.USER_ROLE_ID_LIST).append(":%s:%s")), organId, userId));
|
||||||
stringRedisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
|
stringRedisTemplate.convertAndSend(com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, "");
|
||||||
}).exceptionally(e -> {
|
}).exceptionally(e -> {
|
||||||
log.error("[assignUserRole] redis message发送失败, topic:{}, 异常:{}", RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, e);
|
log.error("[assignUserRole] redis message发送失败, topic:{}, 异常:{}", com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, e);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -764,7 +763,7 @@ public class PermissionServiceImpl implements PermissionService {
|
|||||||
})
|
})
|
||||||
.thenRunAsync(() -> {
|
.thenRunAsync(() -> {
|
||||||
//通知刷新本地权限缓存
|
//通知刷新本地权限缓存
|
||||||
stringRedisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
|
stringRedisTemplate.convertAndSend(com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, "");
|
||||||
})
|
})
|
||||||
.exceptionally(e -> {
|
.exceptionally(e -> {
|
||||||
log.error("[PermissionService][flushCacheWhenTenantPackageChange]失败, 异常:{}", e);
|
log.error("[PermissionService][flushCacheWhenTenantPackageChange]失败, 异常:{}", e);
|
||||||
|
|||||||
+1
-2
@@ -19,7 +19,6 @@ import com.cf.imes.module.system.controller.admin.permission.vo.role.RoleSaveReq
|
|||||||
import com.cf.imes.module.system.dal.dataobject.permission.RoleDO;
|
import com.cf.imes.module.system.dal.dataobject.permission.RoleDO;
|
||||||
import com.cf.imes.module.system.dal.mysql.permission.RoleMapper;
|
import com.cf.imes.module.system.dal.mysql.permission.RoleMapper;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants;
|
|
||||||
import com.cf.imes.module.system.enums.ErrorCodeConstants;
|
import com.cf.imes.module.system.enums.ErrorCodeConstants;
|
||||||
import com.cf.imes.module.system.enums.permission.DataScopeEnum;
|
import com.cf.imes.module.system.enums.permission.DataScopeEnum;
|
||||||
import com.cf.imes.module.system.enums.permission.RoleCodeEnum;
|
import com.cf.imes.module.system.enums.permission.RoleCodeEnum;
|
||||||
@@ -178,7 +177,7 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 通知刷新本地缓存
|
// 通知刷新本地缓存
|
||||||
stringRedisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
|
stringRedisTemplate.convertAndSend(com.cf.imes.framework.redis.constants.RedisKeyConstants.PERMISSION_REFRESH, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user