This is an automated email from the ASF dual-hosted git repository. midnight2104 pushed a commit to branch midnight2104 in repository https://gitbox.apache.org/repos/asf/incubator-shenyu.git
commit 1cc89aa297c6bba44e636defb30a6ed32f75f295 Author: midnight2104 <[email protected]> AuthorDate: Fri Nov 12 14:00:54 2021 +0800 refactor shenyu-admin: code polish --- .../admin/service/impl/AppAuthServiceImpl.java | 5 ++ .../service/impl/DashboardUserServiceImpl.java | 8 +- .../shenyu/admin/service/impl/EnumServiceImpl.java | 3 + .../admin/service/impl/MetaDataServiceImpl.java | 15 ++-- .../admin/service/impl/PermissionServiceImpl.java | 45 ++++++----- .../admin/service/impl/PluginServiceImpl.java | 26 +++++-- .../admin/service/impl/ResourceServiceImpl.java | 36 +++++---- .../shenyu/admin/service/impl/RoleServiceImpl.java | 46 +++++++---- .../shenyu/admin/service/impl/RuleServiceImpl.java | 17 ++-- .../admin/service/impl/ShenyuDictServiceImpl.java | 3 +- .../admin/service/impl/SyncDataServiceImpl.java | 27 +++++-- .../admin/service/impl/UpstreamCheckService.java | 91 ++++++++++++---------- .../admin/shiro/bean/StatelessAuthFilter.java | 7 +- .../shenyu/admin/shiro/config/ShiroRealm.java | 3 +- .../shenyu/admin/utils/ShenyuResultMessage.java | 2 - 15 files changed, 208 insertions(+), 126 deletions(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/AppAuthServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/AppAuthServiceImpl.java index 8b9cfdc..1aa859d 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/AppAuthServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/AppAuthServiceImpl.java @@ -169,6 +169,7 @@ public class AppAuthServiceImpl implements AppAuthService { List<AuthParamDTO> authParamDTOList = appAuthDTO.getAuthParamDTOList(); if (CollectionUtils.isNotEmpty(authParamDTOList)) { authParamMapper.deleteByAuthId(appAuthDTO.getId()); + List<AuthParamDO> authParamDOList = authParamDTOList.stream() .map(dto -> AuthParamDO.create(appAuthDTO.getId(), dto.getAppName(), dto.getAppParam())) .collect(Collectors.toList()); @@ -179,13 +180,16 @@ public class AppAuthServiceImpl implements AppAuthService { List<AuthPathDO> oldAuthPathDOList = authPathMapper.findByAuthId(appAuthDTO.getId()); String appName = oldAuthPathDOList.stream().findFirst() .map(AuthPathDO::getAppName).orElse(StringUtils.EMPTY); + authPathMapper.deleteByAuthId(appAuthDTO.getId()); + List<AuthPathDO> authPathDOList = authPathDTOList.stream() .filter(Objects::nonNull) .map(dto -> AuthPathDO.create(dto.getPath(), appAuthDTO.getId(), appName)) .collect(Collectors.toList()); authPathMapper.batchSave(authPathDOList); } + AppAuthData appAuthData = buildByEntity(appAuthDO); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.APP_AUTH, DataEventTypeEnum.UPDATE, @@ -202,6 +206,7 @@ public class AppAuthServiceImpl implements AppAuthService { List<AuthPathDTO> authPathDTOList = authPathWarpDTO.getAuthPathDTOList(); if (CollectionUtils.isNotEmpty(authPathDTOList)) { authPathMapper.deleteByAuthId(authPathWarpDTO.getId()); + List<AuthPathDO> collect = authPathDTOList.stream() .filter(Objects::nonNull) .map(authPathDTO -> AuthPathDO.create(authPathDTO.getPath(), appAuthDO.getId(), authPathDTO.getAppName())) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DashboardUserServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DashboardUserServiceImpl.java index d47038b..37f2eb8 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DashboardUserServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DashboardUserServiceImpl.java @@ -116,12 +116,15 @@ public class DashboardUserServiceImpl implements DashboardUserService { bindUserRole(dashboardUserDO.getId(), dashboardUserDTO.getRoles()); return dashboardUserMapper.insertSelective(dashboardUserDO); } + if (!AdminConstants.ADMIN_NAME.equals(dashboardUserDTO.getUserName())) { userRoleMapper.deleteByUserId(dashboardUserDTO.getId()); } + if (CollectionUtils.isNotEmpty(dashboardUserDTO.getRoles())) { bindUserRole(dashboardUserDTO.getId(), dashboardUserDTO.getRoles()); } + return dashboardUserMapper.updateSelective(dashboardUserDO); } @@ -213,9 +216,11 @@ public class DashboardUserServiceImpl implements DashboardUserService { if (Objects.nonNull(ldapTemplate)) { dashboardUserVO = loginByLdap(userName, password); } + if (Objects.isNull(dashboardUserVO)) { dashboardUserVO = loginByDatabase(userName, password); } + return LoginDashboardUserVO.buildLoginDashboardUserVO(dashboardUserVO) .setToken(JwtUtils.generateToken(dashboardUserVO.getUserName(), dashboardUserVO.getPassword(), jwtProperties.getExpiredSeconds())); @@ -256,8 +261,7 @@ public class DashboardUserServiceImpl implements DashboardUserService { private DashboardUserVO loginByDatabase(final String userName, final String password) { String key = secretProperties.getKey(); String iv = secretProperties.getIv(); - DashboardUserVO dashboardUserVO = findByQuery(userName, AesUtils.aesEncryption(password, key, iv)); - return dashboardUserVO; + return findByQuery(userName, AesUtils.aesEncryption(password, key, iv)); } /** diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/EnumServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/EnumServiceImpl.java index 2189a61..e82ddc5 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/EnumServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/EnumServiceImpl.java @@ -100,9 +100,11 @@ public class EnumServiceImpl implements EnumService { List<EnumVO> redisModeEnums = Arrays.stream(RedisModeEnum.values()) .map(redisModeEnum -> new EnumVO(null, redisModeEnum.getName(), true)) .collect(Collectors.toList()); + List<EnumVO> hystrixIsolationModeEnums = Arrays.stream(HystrixIsolationModeEnum.values()) .map(hystrixIsolationModeEnum -> new EnumVO(hystrixIsolationModeEnum.getCode(), hystrixIsolationModeEnum.getName(), true)) .collect(Collectors.toList()); + Map<String, List<EnumVO>> enums = Maps.newHashMap(); enums.put("httpMethodEnums", httpMethodEnums); enums.put("loadBalanceEnums", loadBalanceEnums); @@ -117,6 +119,7 @@ public class EnumServiceImpl implements EnumService { enums.put("wafEnums", wafEnums); enums.put("redisModeEnums", redisModeEnums); enums.put("hystrixIsolationModeEnums", hystrixIsolationModeEnums); + return enums; } } diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java index a6221be..cf48d3f 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java @@ -97,7 +97,7 @@ public class MetaDataServiceImpl implements MetaDataService { } MetaDataDO metaDataDO = MetaDataTransfer.INSTANCE.mapToEntity(metaDataDTO); DataEventTypeEnum eventType; - String pathDesc = metaDataDO.getPathDesc() == null ? "" : metaDataDO.getPathDesc(); + String pathDesc = Objects.isNull(metaDataDO.getPathDesc()) ? "" : metaDataDO.getPathDesc(); if (StringUtils.isEmpty(metaDataDTO.getId())) { Timestamp currentTime = new Timestamp(System.currentTimeMillis()); metaDataDO.setId(UUIDUtils.getInstance().generateShortUuid()); @@ -168,11 +168,10 @@ public class MetaDataServiceImpl implements MetaDataService { @Override @Pageable public CommonPager<MetaDataVO> listByPage(final MetaDataQuery metaDataQuery) { - return PageResultUtils.result(metaDataQuery.getPageParameter(), - () -> metaDataMapper.selectByQuery(metaDataQuery) - .stream() - .map(MetaDataTransfer.INSTANCE::mapToVO) - .collect(Collectors.toList())); + return PageResultUtils.result(metaDataQuery.getPageParameter(), () -> metaDataMapper.selectByQuery(metaDataQuery) + .stream() + .map(MetaDataTransfer.INSTANCE::mapToVO) + .collect(Collectors.toList())); } @Override @@ -216,10 +215,12 @@ public class MetaDataServiceImpl implements MetaDataService { LOG.error("metaData create param is error, {}", metaDataDTO); return AdminConstants.PARAMS_ERROR; } + final MetaDataDO exist = metaDataMapper.findByPath(metaDataDTO.getPath()); - if (exist != null && !exist.getId().equals(metaDataDTO.getId())) { + if (Objects.nonNull(exist) && !exist.getId().equals(metaDataDTO.getId())) { return AdminConstants.DATA_PATH_IS_EXIST; } + return StringUtils.EMPTY; } diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PermissionServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PermissionServiceImpl.java index 74e6814..30e45c9 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PermissionServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PermissionServiceImpl.java @@ -80,21 +80,24 @@ public class PermissionServiceImpl implements PermissionService { @Override public PermissionMenuVO getPermissionMenu(final String token) { UserInfo userInfo = JwtUtils.getUserInfo(); - if (Objects.nonNull(userInfo)) { - List<ResourceVO> resourceVOList = getResourceListByUserName(userInfo.getUserName()); - if (CollectionUtils.isNotEmpty(resourceVOList)) { - List<MenuInfo> menuInfoList = new ArrayList<>(); - resourceService.getMenuInfo(menuInfoList, resourceVOList, null); - return new PermissionMenuVO(menuInfoList, getAuthPerm(resourceVOList), getAllAuthPerms()); - } + if (Objects.isNull(userInfo)) { + return null; } - return null; + + List<ResourceVO> resourceVOList = getResourceListByUserName(userInfo.getUserName()); + if (CollectionUtils.isEmpty(resourceVOList)) { + return null; + } + + List<MenuInfo> menuInfoList = new ArrayList<>(); + resourceService.getMenuInfo(menuInfoList, resourceVOList, null); + return new PermissionMenuVO(menuInfoList, getAuthPerm(resourceVOList), getAllAuthPerms()); } /** - * get Auth perm by user name for shiro. + * get Auth perm by username for shiro. * - * @param userName user name. + * @param userName username. * @return {@linkplain Set} */ @Override @@ -109,7 +112,7 @@ public class PermissionServiceImpl implements PermissionService { /** * get resource by username. * - * @param userName user name + * @param userName username * @return {@linkplain List} */ private List<ResourceVO> getResourceListByUserName(final String userName) { @@ -117,17 +120,20 @@ public class PermissionServiceImpl implements PermissionService { List<String> roleIds = userRoleDOList.stream().filter(Objects::nonNull) .map(UserRoleDO::getRoleId) .collect(Collectors.toList()); + Set<String> resourceIds = permissionMapper.findByObjectIds(roleIds).stream() .map(PermissionDO::getResourceId) .filter(StringUtils::isNoneBlank) .collect(Collectors.toSet()); - if (CollectionUtils.isNotEmpty(resourceIds)) { - return new ArrayList<>(resourceIds).stream() - .map(resource -> ResourceVO.buildResourceVO(resourceMapper.selectById(resource))) - .filter(Objects::nonNull) - .collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(resourceIds)) { + return Collections.emptyList(); } - return Collections.emptyList(); + + return new ArrayList<>(resourceIds).stream() + .map(resource -> ResourceVO.buildResourceVO(resourceMapper.selectById(resource))) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } /** @@ -150,7 +156,8 @@ public class PermissionServiceImpl implements PermissionService { */ private List<AuthPerm> getAllAuthPerms() { return resourceMapper.selectAll().stream() - .filter(item -> item.getResourceType().equals(ResourceTypeConstants.MENU_TYPE_2)) - .map(item -> AuthPerm.buildAuthPerm(ResourceVO.buildResourceVO(item))).collect(Collectors.toList()); + .filter(item -> item.getResourceType().equals(ResourceTypeConstants.MENU_TYPE_2)) + .map(item -> AuthPerm.buildAuthPerm(ResourceVO.buildResourceVO(item))) + .collect(Collectors.toList()); } } diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java index 7130615..2c04d2f 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java @@ -112,6 +112,7 @@ public class PluginServiceImpl implements PluginService { if (StringUtils.isNoneBlank(msg)) { return msg; } + PluginDO pluginDO = PluginDO.buildPluginDO(pluginDTO); DataEventTypeEnum eventType = DataEventTypeEnum.CREATE; if (StringUtils.isBlank(pluginDTO.getId())) { @@ -137,6 +138,7 @@ public class PluginServiceImpl implements PluginService { @Override @Transactional(rollbackFor = Exception.class) public String delete(final List<String> ids) { + // 1. select plugin id. List<PluginDO> plugins = Optional.ofNullable(this.pluginMapper.selectByIds(ids)) .orElse(Collections.emptyList()); final List<String> pluginIds = plugins.stream() @@ -144,11 +146,13 @@ public class PluginServiceImpl implements PluginService { if (CollectionUtils.isEmpty(pluginIds)) { return AdminConstants.SYS_PLUGIN_ID_NOT_EXIST; } - // delete plugins + + // 2. delete plugins. this.pluginMapper.deleteByIds(pluginIds); - // delete plugin handle + // 3. delete plugin handle. this.pluginHandleMapper.deleteByPluginIds(pluginIds); - // all selectors + + // 4. all selectors. final List<String> selectorIds = Optional.ofNullable(this.selectorMapper.findByPluginIds(pluginIds)) .orElse(Collections.emptyList()) .stream().map(SelectorDO::getId).collect(Collectors.toList()); @@ -159,20 +163,25 @@ public class PluginServiceImpl implements PluginService { this.selectorConditionMapper.deleteBySelectorIds(selectorIds); // delete all rules final List<String> ruleIds = Optional.ofNullable(this.ruleMapper.findBySelectorIds(selectorIds)) - .orElse(Collections.emptyList()).stream().map(RuleDO::getId).collect(Collectors.toList()); + .orElse(Collections.emptyList()) + .stream() + .map(RuleDO::getId) + .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(ruleIds)) { this.ruleMapper.deleteByIds(ruleIds); // delete all rule conditions this.ruleConditionMapper.deleteByRuleIds(ruleIds); } } - // delete resource & permission + + // 5. delete resource & permission. final List<ResourceVO> resources = this.resourceService.listByTitles(plugins.stream() .map(PluginDO::getName).collect(Collectors.toList())); if (CollectionUtils.isNotEmpty(resources)) { this.resourceService.delete(resources.stream().map(ResourceVO::getId).collect(Collectors.toList())); } - // publish change event. + + // 6. publish change event. eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.PLUGIN, DataEventTypeEnum.DELETE, plugins.stream().map(PluginTransfer.INSTANCE::mapToData).collect(Collectors.toList()))); return StringUtils.EMPTY; @@ -198,6 +207,7 @@ public class PluginServiceImpl implements PluginService { pluginMapper.updateEnable(pluginDO); plugins.add(pluginDO); } + // publish change event. if (CollectionUtils.isNotEmpty(plugins)) { eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.PLUGIN, DataEventTypeEnum.UPDATE, @@ -248,7 +258,7 @@ public class PluginServiceImpl implements PluginService { Objects.requireNonNull(pluginDO); return pluginDO.getId(); } - + /** * Find by name plugin do. * @@ -259,7 +269,7 @@ public class PluginServiceImpl implements PluginService { public PluginDO findByName(final String name) { return pluginMapper.selectByName(name); } - + /** * check plugin Data integrity. * diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ResourceServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ResourceServiceImpl.java index c7f240b..93e4727 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ResourceServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ResourceServiceImpl.java @@ -56,7 +56,8 @@ public class ResourceServiceImpl implements ResourceService { private final PermissionMapper permissionMapper; - public ResourceServiceImpl(final ResourceMapper resourceMapper, final PermissionMapper permissionMapper) { + public ResourceServiceImpl(final ResourceMapper resourceMapper, + final PermissionMapper permissionMapper) { this.resourceMapper = resourceMapper; this.permissionMapper = permissionMapper; } @@ -72,7 +73,7 @@ public class ResourceServiceImpl implements ResourceService { } /** - * create or update resource. + * create or update resource. * * @param resourceDTO {@linkplain ResourceDTO} * @return rows int @@ -152,11 +153,10 @@ public class ResourceServiceImpl implements ResourceService { @Override @Pageable public CommonPager<ResourceVO> listByPage(final ResourceQuery resourceQuery) { - return PageResultUtils.result(resourceQuery.getPageParameter(), - () -> resourceMapper.selectByQuery(resourceQuery) - .stream() - .map(ResourceVO::buildResourceVO) - .collect(Collectors.toList())); + return PageResultUtils.result(resourceQuery.getPageParameter(), () -> resourceMapper.selectByQuery(resourceQuery) + .stream() + .map(ResourceVO::buildResourceVO) + .collect(Collectors.toList())); } /** @@ -167,12 +167,13 @@ public class ResourceServiceImpl implements ResourceService { @Override public List<MenuInfo> getMenuTree() { List<ResourceVO> resourceVOList = resourceMapper.selectAll().stream().map(ResourceVO::buildResourceVO).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(resourceVOList)) { - List<MenuInfo> menuInfoList = new ArrayList<>(); - getMenuInfo(menuInfoList, resourceVOList, null); - return menuInfoList; + if (CollectionUtils.isEmpty(resourceVOList)) { + return null; } - return null; + + List<MenuInfo> menuInfoList = new ArrayList<>(); + getMenuInfo(menuInfoList, resourceVOList, null); + return menuInfoList; } /** @@ -192,17 +193,20 @@ public class ResourceServiceImpl implements ResourceService { * get Menu Info. * * @param menuInfoList {@linkplain List} menu info. - * @param metaList {@linkplain List} resource list - * @param menuInfo {@linkplain MenuInfo} + * @param metaList {@linkplain List} resource list + * @param menuInfo {@linkplain MenuInfo} */ @Override - public void getMenuInfo(final List<MenuInfo> menuInfoList, final List<ResourceVO> metaList, final MenuInfo menuInfo) { + public void getMenuInfo(final List<MenuInfo> menuInfoList, + final List<ResourceVO> metaList, + final MenuInfo menuInfo) { for (ResourceVO resourceVO : metaList) { String parentId = resourceVO.getParentId(); MenuInfo tempMenuInfo = MenuInfo.buildMenuInfo(resourceVO); if (ObjectUtils.isEmpty(tempMenuInfo)) { continue; } + if (ObjectUtils.isEmpty(menuInfo) && reactor.util.StringUtils.isEmpty(parentId)) { menuInfoList.add(tempMenuInfo); if (Objects.equals(resourceVO.getIsLeaf(), Boolean.FALSE)) { @@ -221,7 +225,7 @@ public class ResourceServiceImpl implements ResourceService { * get delete resource ids. * * @param resourceIds resource ids - * @param metaList all resource object + * @param metaList all resource object */ private void getDeleteResourceIds(final Map<String, String> deleteResourceIds, final List<String> resourceIds, final List<ResourceVO> metaList) { diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RoleServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RoleServiceImpl.java index 8bc328a..4158a3d 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RoleServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RoleServiceImpl.java @@ -60,7 +60,9 @@ public class RoleServiceImpl implements RoleService { private final ResourceMapper resourceMapper; - public RoleServiceImpl(final RoleMapper roleMapper, final PermissionMapper permissionMapper, final ResourceMapper resourceMapper) { + public RoleServiceImpl(final RoleMapper roleMapper, + final PermissionMapper permissionMapper, + final ResourceMapper resourceMapper) { this.roleMapper = roleMapper; this.permissionMapper = permissionMapper; this.resourceMapper = resourceMapper; @@ -105,8 +107,9 @@ public class RoleServiceImpl implements RoleService { @Override public RoleEditVO findById(final String id) { RoleVO sysRole = RoleVO.buildRoleVO(roleMapper.selectById(id)); - return Optional.ofNullable(sysRole).map(item -> new RoleEditVO(getPermissionIdsByRoleId(item.getId()), item, - getAllPermissions())).orElse(null); + return Optional.ofNullable(sysRole) + .map(item -> new RoleEditVO(getPermissionIdsByRoleId(item.getId()), item, getAllPermissions())) + .orElse(null); } /** @@ -129,8 +132,10 @@ public class RoleServiceImpl implements RoleService { @Override @Pageable public CommonPager<RoleVO> listByPage(final RoleQuery roleQuery) { - return PageResultUtils.result(roleQuery.getPageParameter(), - () -> roleMapper.selectByQuery(roleQuery).stream().map(RoleVO::buildRoleVO).collect(Collectors.toList())); + return PageResultUtils.result(roleQuery.getPageParameter(), () -> roleMapper.selectByQuery(roleQuery) + .stream() + .map(RoleVO::buildRoleVO) + .collect(Collectors.toList())); } /** @@ -140,7 +145,10 @@ public class RoleServiceImpl implements RoleService { */ @Override public List<RoleVO> selectAll() { - return roleMapper.selectAll().stream().map(RoleVO::buildRoleVO).collect(Collectors.toList()); + return roleMapper.selectAll() + .stream() + .map(RoleVO::buildRoleVO) + .collect(Collectors.toList()); } /** @@ -149,8 +157,12 @@ public class RoleServiceImpl implements RoleService { * @return {@linkplain PermissionInfo} */ private PermissionInfo getAllPermissions() { - List<ResourceVO> resourceVOList = resourceMapper.selectAll().stream().map(ResourceVO::buildResourceVO).collect(Collectors.toList()); + List<ResourceVO> resourceVOList = resourceMapper.selectAll() + .stream() + .map(ResourceVO::buildResourceVO) + .collect(Collectors.toList()); List<String> permissionIds = resourceVOList.stream().map(ResourceVO::getId).collect(Collectors.toList()); + List<ResourceInfo> treeList = new ArrayList<>(); getTreeModelList(treeList, resourceVOList, null); return PermissionInfo.builder().treeList(treeList).permissionIds(permissionIds).build(); @@ -163,17 +175,22 @@ public class RoleServiceImpl implements RoleService { * @return {@linkplain List} */ private List<String> getPermissionIdsByRoleId(final String roleId) { - return permissionMapper.findByObjectId(roleId).stream().map(PermissionDO::getResourceId).collect(Collectors.toList()); + return permissionMapper.findByObjectId(roleId) + .stream() + .map(PermissionDO::getResourceId) + .collect(Collectors.toList()); } /** * get menu list. * - * @param treeList {@linkplain ResourceInfo} - * @param metaList {@linkplain ResourceDTO} + * @param treeList {@linkplain ResourceInfo} + * @param metaList {@linkplain ResourceDTO} * @param resourceInfo {@linkplain ResourceInfo} */ - private void getTreeModelList(final List<ResourceInfo> treeList, final List<ResourceVO> metaList, final ResourceInfo resourceInfo) { + private void getTreeModelList(final List<ResourceInfo> treeList, + final List<ResourceVO> metaList, + final ResourceInfo resourceInfo) { for (ResourceVO resourceVO : metaList) { String parentId = resourceVO.getParentId(); ResourceInfo resourceInfoItem = ResourceInfo.buildResourceInfo(resourceVO); @@ -195,7 +212,7 @@ public class RoleServiceImpl implements RoleService { /** * get two list different. * - * @param preList {@linkplain List} + * @param preList {@linkplain List} * @param lastList {@linkplain List} * @return {@linkplain List} */ @@ -203,9 +220,11 @@ public class RoleServiceImpl implements RoleService { if (CollectionUtils.isEmpty(lastList)) { return null; } + if (CollectionUtils.isEmpty(preList)) { return lastList; } + Map<String, Integer> map = preList.stream().distinct() .collect(Collectors.toMap(source -> source, source -> 1)); return lastList.stream().filter(item -> !map.containsKey(item)).collect(Collectors.toList()); @@ -232,7 +251,7 @@ public class RoleServiceImpl implements RoleService { /** * manger role permission. * - * @param roleId role id. + * @param roleId role id. * @param currentPermissionList {@linkplain List} current role permission ids */ private void manageRolePermission(final String roleId, final List<String> currentPermissionList) { @@ -241,6 +260,7 @@ public class RoleServiceImpl implements RoleService { if (CollectionUtils.isNotEmpty(addPermission)) { batchSavePermission(addPermission.stream().map(node -> PermissionDO.buildPermissionDO(PermissionDTO.builder().objectId(roleId).resourceId(node).build())).collect(Collectors.toList())); } + List<String> deletePermission = getListDiff(currentPermissionList, lastPermissionList); if (CollectionUtils.isNotEmpty(deletePermission)) { deletePermission.forEach(node -> deleteByObjectIdAndResourceId(new PermissionQuery(roleId, node))); diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java index b174cbd..6220b21 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java @@ -95,6 +95,7 @@ public class RuleServiceImpl implements RuleService { if (Objects.nonNull(exist)) { return ""; } + RuleDO ruleDO = RuleDO.buildRuleDO(ruleDTO); List<RuleConditionDTO> ruleConditions = ruleDTO.getRuleConditions(); if (StringUtils.isEmpty(ruleDTO.getId())) { @@ -236,21 +237,23 @@ public class RuleServiceImpl implements RuleService { } private RuleData buildRuleData(final RuleDO ruleDO) { - // query for conditions - List<ConditionData> conditions = ruleConditionMapper.selectByQuery( - new RuleConditionQuery(ruleDO.getId())) - .stream() - .filter(Objects::nonNull) - .map(ConditionTransfer.INSTANCE::mapToRuleDO) - .collect(Collectors.toList()); SelectorDO selectorDO = selectorMapper.selectById(ruleDO.getSelectorId()); if (Objects.isNull(selectorDO)) { return null; } + PluginDO pluginDO = pluginMapper.selectById(selectorDO.getPluginId()); if (Objects.isNull(pluginDO)) { return null; } + + // query for conditions + List<ConditionData> conditions = ruleConditionMapper.selectByQuery( + new RuleConditionQuery(ruleDO.getId())) + .stream() + .filter(Objects::nonNull) + .map(ConditionTransfer.INSTANCE::mapToRuleDO) + .collect(Collectors.toList()); return RuleDO.transFrom(ruleDO, pluginDO.getName(), conditions); } } diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ShenyuDictServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ShenyuDictServiceImpl.java index fdb3897..2f9b33b 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ShenyuDictServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ShenyuDictServiceImpl.java @@ -17,6 +17,7 @@ package org.apache.shenyu.admin.service.impl; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shenyu.admin.aspect.annotation.Pageable; import org.apache.shenyu.admin.mapper.ShenyuDictMapper; @@ -79,7 +80,7 @@ public class ShenyuDictServiceImpl implements ShenyuDictService { @Override public Integer enabled(final List<String> ids, final Boolean enabled) { - if (ids == null || ids.isEmpty()) { + if (CollectionUtils.isEmpty(ids)) { return 0; } return shenyuDictMapper.enabled(ids, enabled); diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java index 2322737..0ac8860 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java @@ -83,13 +83,18 @@ public class SyncDataServiceImpl implements SyncDataService { @Override public boolean syncAll(final DataEventTypeEnum type) { appAuthService.syncData(); + List<PluginData> pluginDataList = pluginService.listAll(); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.PLUGIN, type, pluginDataList)); + List<SelectorData> selectorDataList = selectorService.listAll(); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, type, selectorDataList)); + List<RuleData> ruleDataList = ruleService.listAll(); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.RULE, type, ruleDataList)); + metaDataService.syncData(); + return true; } @@ -98,16 +103,22 @@ public class SyncDataServiceImpl implements SyncDataService { PluginVO pluginVO = pluginService.findById(pluginId); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.PLUGIN, DataEventTypeEnum.UPDATE, Collections.singletonList(PluginTransfer.INSTANCE.mapDataTOVO(pluginVO)))); + List<SelectorData> selectorDataList = selectorService.findByPluginId(pluginId); - if (CollectionUtils.isNotEmpty(selectorDataList)) { - eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, DataEventTypeEnum.REFRESH, selectorDataList)); - List<RuleData> allRuleDataList = new ArrayList<>(); - for (SelectorData selectData : selectorDataList) { - List<RuleData> ruleDataList = ruleService.findBySelectorId(selectData.getId()); - allRuleDataList.addAll(ruleDataList); - } - eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.RULE, DataEventTypeEnum.REFRESH, allRuleDataList)); + if (CollectionUtils.isEmpty(selectorDataList)) { + return true; } + + eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, DataEventTypeEnum.REFRESH, selectorDataList)); + + List<RuleData> allRuleDataList = new ArrayList<>(); + for (SelectorData selectData : selectorDataList) { + List<RuleData> ruleDataList = ruleService.findBySelectorId(selectData.getId()); + allRuleDataList.addAll(ruleDataList); + } + + eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.RULE, DataEventTypeEnum.REFRESH, allRuleDataList)); + return true; } } diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/UpstreamCheckService.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/UpstreamCheckService.java index 980fe67..197470c 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/UpstreamCheckService.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/UpstreamCheckService.java @@ -73,6 +73,8 @@ public class UpstreamCheckService { private static final Set<ZombieUpstream> ZOMBIE_SET = Sets.newConcurrentHashSet(); + private static final String REGISTER_TYPE_HTTP = "http"; + private final int zombieCheckTimes; private final int scheduledTime; @@ -88,25 +90,27 @@ public class UpstreamCheckService { private final PluginMapper pluginMapper; private final SelectorConditionMapper selectorConditionMapper; - + private final SelectorHandleConverterFactor converterFactor; private ScheduledThreadPoolExecutor executor; private ScheduledFuture<?> scheduledFuture; - + /** * Instantiates a new Upstream check service. * - * @param selectorMapper the selector mapper - * @param eventPublisher the event publisher - * @param pluginMapper the plugin mapper - * @param selectorConditionMapper the selectorCondition mapper + * @param selectorMapper the selector mapper + * @param eventPublisher the event publisher + * @param pluginMapper the plugin mapper + * @param selectorConditionMapper the selectorCondition mapper * @param shenyuRegisterCenterConfig the shenyu register center config - * @param converterFactor the converter factor + * @param converterFactor the converter factor */ - public UpstreamCheckService(final SelectorMapper selectorMapper, final ApplicationEventPublisher eventPublisher, - final PluginMapper pluginMapper, final SelectorConditionMapper selectorConditionMapper, + public UpstreamCheckService(final SelectorMapper selectorMapper, + final ApplicationEventPublisher eventPublisher, + final PluginMapper pluginMapper, + final SelectorConditionMapper selectorConditionMapper, final ShenyuRegisterCenterConfig shenyuRegisterCenterConfig, final SelectorHandleConverterFactor converterFactor) { this.selectorMapper = selectorMapper; @@ -123,7 +127,7 @@ public class UpstreamCheckService { setup(); } } - + /** * Set up. */ @@ -134,24 +138,27 @@ public class UpstreamCheckService { scheduledFuture = executor.scheduleWithFixedDelay(this::scheduled, 10, scheduledTime, TimeUnit.SECONDS); } } - + /** * Close relative resource on container destroy. */ @PreDestroy public void close() { - if (Objects.nonNull(scheduledFuture)) { - scheduledFuture.cancel(false); - executor.shutdownNow(); - try { - executor.awaitTermination(5, TimeUnit.SECONDS); - } catch (InterruptedException ex) { - LOG.error("shutdown executor error", ex); - Thread.currentThread().interrupt(); - } + if (Objects.isNull(scheduledFuture)) { + return; } + + scheduledFuture.cancel(false); + executor.shutdownNow(); + try { + executor.awaitTermination(5, TimeUnit.SECONDS); + } catch (InterruptedException ex) { + LOG.error("shutdown executor error", ex); + Thread.currentThread().interrupt(); + } + } - + /** * Remove by key. * @@ -160,17 +167,18 @@ public class UpstreamCheckService { public static void removeByKey(final String selectorName) { UPSTREAM_MAP.remove(selectorName); } - + /** * Submit. * - * @param selectorId the selector id + * @param selectorId the selector id * @param commonUpstream the common upstream */ public void submit(final String selectorId, final CommonUpstream commonUpstream) { if (!Constants.DEFAULT_REGISTER_TYPE.equalsIgnoreCase(registerType)) { return; } + if (UPSTREAM_MAP.containsKey(selectorId)) { List<CommonUpstream> upstreams = UPSTREAM_MAP.getOrDefault(selectorId, Collections.emptyList()); Optional<CommonUpstream> exists = upstreams.stream().filter(item -> StringUtils.isNotBlank(item.getUpstreamUrl()) @@ -184,15 +192,15 @@ public class UpstreamCheckService { UPSTREAM_MAP.put(selectorId, Lists.newArrayList(commonUpstream)); } } - + /** * Replace. * - * @param selectorId the selector name + * @param selectorId the selector name * @param commonUpstreams the common upstream list */ public void replace(final String selectorId, final List<CommonUpstream> commonUpstreams) { - if (!"http".equalsIgnoreCase(registerType)) { + if (!REGISTER_TYPE_HTTP.equalsIgnoreCase(registerType)) { return; } UPSTREAM_MAP.put(selectorId, commonUpstreams); @@ -268,20 +276,25 @@ public class UpstreamCheckService { private void updateSelectorHandler(final String selectorId, final List<CommonUpstream> aliveList) { SelectorDO selectorDO = selectorMapper.selectById(selectorId); - if (Objects.nonNull(selectorDO)) { - PluginDO pluginDO = pluginMapper.selectById(selectorDO.getPluginId()); - String handler = converterFactor.newInstance(pluginDO.getName()).handler(selectorDO.getHandle(), aliveList); - selectorDO.setHandle(handler); - selectorMapper.updateSelective(selectorDO); - List<ConditionData> conditionDataList = ConditionTransfer.INSTANCE.mapToSelectorDOS( - selectorConditionMapper.selectByQuery(new SelectorConditionQuery(selectorDO.getId()))); - SelectorData selectorData = SelectorDO.transFrom(selectorDO, pluginDO.getName(), conditionDataList); - selectorData.setHandle(handler); - // publish change event. - eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, DataEventTypeEnum.UPDATE, Collections.singletonList(selectorData))); + if (Objects.isNull(selectorDO)) { + return; } + + PluginDO pluginDO = pluginMapper.selectById(selectorDO.getPluginId()); + String handler = converterFactor.newInstance(pluginDO.getName()).handler(selectorDO.getHandle(), aliveList); + selectorDO.setHandle(handler); + selectorMapper.updateSelective(selectorDO); + + List<ConditionData> conditionDataList = ConditionTransfer.INSTANCE.mapToSelectorDOS( + selectorConditionMapper.selectByQuery(new SelectorConditionQuery(selectorDO.getId()))); + SelectorData selectorData = SelectorDO.transFrom(selectorDO, pluginDO.getName(), conditionDataList); + selectorData.setHandle(handler); + + // publish change event. + eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, DataEventTypeEnum.UPDATE, Collections.singletonList(selectorData))); + } - + /** * fetch upstream data from db. */ @@ -292,7 +305,7 @@ public class UpstreamCheckService { } pluginDOList.stream().filter(Objects::nonNull).forEach(pluginDO -> { final List<SelectorDO> selectorDOList = selectorMapper.findByPluginId(pluginDO.getId()); - for (SelectorDO selectorDO : selectorDOList) { + for (SelectorDO selectorDO : selectorDOList) { if (Objects.isNull(selectorDO) || StringUtils.isBlank(selectorDO.getHandle())) { continue; } diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/bean/StatelessAuthFilter.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/bean/StatelessAuthFilter.java index 17cabb3..fac905c 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/bean/StatelessAuthFilter.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/bean/StatelessAuthFilter.java @@ -44,14 +44,15 @@ public class StatelessAuthFilter extends AccessControlFilter { private static final String HEAD_TOKEN = "X-Access-Token"; @Override - protected boolean isAccessAllowed(final ServletRequest servletRequest, final ServletResponse servletResponse, + protected boolean isAccessAllowed(final ServletRequest servletRequest, + final ServletResponse servletResponse, final Object o) { return false; } @Override - protected boolean onAccessDenied(final ServletRequest servletRequest, final ServletResponse servletResponse) - throws Exception { + protected boolean onAccessDenied(final ServletRequest servletRequest, + final ServletResponse servletResponse) throws Exception { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; if (StringUtils.equals(HttpMethod.OPTIONS.name(), httpServletRequest.getMethod())) { return true; diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/config/ShiroRealm.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/config/ShiroRealm.java index 26ecacf..ef98d30 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/config/ShiroRealm.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/config/ShiroRealm.java @@ -35,6 +35,7 @@ import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.springframework.stereotype.Service; +import java.util.Objects; import java.util.Set; /** @@ -83,7 +84,7 @@ public class ShiroRealm extends AuthorizingRealm { } DashboardUserVO dashboardUserVO = dashboardUserService.findByUserName(userName); - if (dashboardUserVO == null) { + if (Objects.isNull(dashboardUserVO)) { throw new AuthenticationException(String.format("userName(%s) can not be found.", userName)); } diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/ShenyuResultMessage.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/ShenyuResultMessage.java index 8d7688c..95dda8b 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/ShenyuResultMessage.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/ShenyuResultMessage.java @@ -26,8 +26,6 @@ public final class ShenyuResultMessage { public static final String CREATE_SUCCESS = "create success"; - public static final String CREATE_FAILED = "create failed"; - public static final String DELETE_SUCCESS = "delete success"; public static final String UPDATE_SUCCESS = "update success";
