diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DashboardUserController.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DashboardUserController.java index 049854b8534c..be658d113aee 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DashboardUserController.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/DashboardUserController.java @@ -29,6 +29,7 @@ import org.apache.shenyu.admin.service.DashboardUserService; import org.apache.shenyu.admin.utils.AesUtils; import org.apache.shenyu.admin.utils.ShenyuResultMessage; +import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -70,14 +71,15 @@ public DashboardUserController(final SecretProperties secretProperties, final Da * @param pageSize page size * @return {@linkplain ShenyuAdminResult} */ + @RequiresPermissions("system:manager:list") @GetMapping("") - public ShenyuAdminResult queryDashboardUsers(final String userName, final Integer currentPage, final Integer pageSize) { - String key = secretProperties.getKey(); - String iv = secretProperties.getIv(); - CommonPager commonPager = dashboardUserService.listByPage(new DashboardUserQuery(userName, new PageParameter(currentPage, pageSize))); + public ShenyuAdminResult queryDashboardUsers(final String userName, + final Integer currentPage, + final Integer pageSize) { + CommonPager commonPager = dashboardUserService.listByPage(new DashboardUserQuery(userName, + new PageParameter(currentPage, pageSize))); + if (CollectionUtils.isNotEmpty(commonPager.getDataList())) { - commonPager.getDataList() - .forEach(item -> item.setPassword(AesUtils.aesDecryption(item.getPassword(), key, iv))); return ShenyuAdminResult.success(ShenyuResultMessage.QUERY_SUCCESS, commonPager); } else { return ShenyuAdminResult.error(ShenyuResultMessage.DASHBOARD_QUERY_ERROR); @@ -90,13 +92,13 @@ public ShenyuAdminResult queryDashboardUsers(final String userName, final Intege * @param id dashboard user id. * @return {@linkplain ShenyuAdminResult} */ + @RequiresPermissions("system:manager:list") @GetMapping("/{id}") public ShenyuAdminResult detailDashboardUser(@PathVariable("id") final String id) { DashboardUserEditVO dashboardUserEditVO = dashboardUserService.findById(id); - return Optional.ofNullable(dashboardUserEditVO).map(item -> { - item.setPassword(""); - return ShenyuAdminResult.success(ShenyuResultMessage.DETAIL_SUCCESS, item); - }).orElseGet(() -> ShenyuAdminResult.error(ShenyuResultMessage.DASHBOARD_QUERY_ERROR)); + return Optional.ofNullable(dashboardUserEditVO) + .map(item -> ShenyuAdminResult.success(ShenyuResultMessage.DETAIL_SUCCESS, item)) + .orElseGet(() -> ShenyuAdminResult.error(ShenyuResultMessage.DASHBOARD_QUERY_ERROR)); } /** @@ -105,6 +107,7 @@ public ShenyuAdminResult detailDashboardUser(@PathVariable("id") final String id * @param dashboardUserDTO dashboard user. * @return {@linkplain ShenyuAdminResult} */ + @RequiresPermissions("system:manager:add") @PostMapping("") public ShenyuAdminResult createDashboardUser(@Valid @RequestBody final DashboardUserDTO dashboardUserDTO) { String key = secretProperties.getKey(); @@ -123,6 +126,7 @@ public ShenyuAdminResult createDashboardUser(@Valid @RequestBody final Dashboard * @param dashboardUserDTO dashboard user. * @return {@linkplain ShenyuAdminResult} */ + @RequiresPermissions("system:manager:edit") @PutMapping("/{id}") public ShenyuAdminResult updateDashboardUser(@PathVariable("id") final String id, @Valid @RequestBody final DashboardUserDTO dashboardUserDTO) { String key = secretProperties.getKey(); @@ -139,6 +143,7 @@ public ShenyuAdminResult updateDashboardUser(@PathVariable("id") final String id * @param ids primary key. * @return {@linkplain ShenyuAdminResult} */ + @RequiresPermissions("system:manager:delete") @DeleteMapping("/batch") public ShenyuAdminResult deleteDashboardUser(@RequestBody @NotEmpty final List<@NotBlank String> ids) { Integer deleteCount = dashboardUserService.delete(ids); diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DashboardUserVO.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DashboardUserVO.java index f6ce5c68dcdb..3bbd1182afca 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DashboardUserVO.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/DashboardUserVO.java @@ -17,6 +17,7 @@ package org.apache.shenyu.admin.model.vo; +import com.fasterxml.jackson.annotation.JsonIgnore; import org.apache.shenyu.admin.model.entity.DashboardUserDO; import org.apache.shenyu.common.utils.DateUtils; @@ -44,6 +45,7 @@ public class DashboardUserVO implements Serializable { /** * user password. */ + @JsonIgnore private String password; /** 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 8b9cfdc35de1..1aa859d3d038 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 ShenyuAdminResult updateDetail(final AppAuthDTO appAuthDTO) { List authParamDTOList = appAuthDTO.getAuthParamDTOList(); if (CollectionUtils.isNotEmpty(authParamDTOList)) { authParamMapper.deleteByAuthId(appAuthDTO.getId()); + List authParamDOList = authParamDTOList.stream() .map(dto -> AuthParamDO.create(appAuthDTO.getId(), dto.getAppName(), dto.getAppParam())) .collect(Collectors.toList()); @@ -179,13 +180,16 @@ public ShenyuAdminResult updateDetail(final AppAuthDTO appAuthDTO) { List oldAuthPathDOList = authPathMapper.findByAuthId(appAuthDTO.getId()); String appName = oldAuthPathDOList.stream().findFirst() .map(AuthPathDO::getAppName).orElse(StringUtils.EMPTY); + authPathMapper.deleteByAuthId(appAuthDTO.getId()); + List 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 ShenyuAdminResult updateDetailPath(final AuthPathWarpDTO authPathWarpDTO) List authPathDTOList = authPathWarpDTO.getAuthPathDTOList(); if (CollectionUtils.isNotEmpty(authPathDTOList)) { authPathMapper.deleteByAuthId(authPathWarpDTO.getId()); + List 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 d47038bd7c7b..37f2eb882e60 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 int createOrUpdate(final DashboardUserDTO dashboardUserDTO) { 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 LoginDashboardUserVO login(final String userName, final String password) 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 @@ private DashboardUserVO loginByLdap(final String userName, final String password 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 2189a61c61a6..e82ddc58211f 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 Map> list() { List redisModeEnums = Arrays.stream(RedisModeEnum.values()) .map(redisModeEnum -> new EnumVO(null, redisModeEnum.getName(), true)) .collect(Collectors.toList()); + List hystrixIsolationModeEnums = Arrays.stream(HystrixIsolationModeEnum.values()) .map(hystrixIsolationModeEnum -> new EnumVO(hystrixIsolationModeEnum.getCode(), hystrixIsolationModeEnum.getName(), true)) .collect(Collectors.toList()); + Map> enums = Maps.newHashMap(); enums.put("httpMethodEnums", httpMethodEnums); enums.put("loadBalanceEnums", loadBalanceEnums); @@ -117,6 +119,7 @@ public Map> list() { 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 a6221bec7017..cf48d3f8b052 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 String createOrUpdate(final MetaDataDTO metaDataDTO) { } 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 MetaDataVO findById(final String id) { @Override @Pageable public CommonPager 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 @@ private String checkData(final MetaDataDTO metaDataDTO) { 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 74e681404de8..30e45c935674 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 PermissionServiceImpl(final DashboardUserMapper dashboardUserMapper, @Override public PermissionMenuVO getPermissionMenu(final String token) { UserInfo userInfo = JwtUtils.getUserInfo(); - if (Objects.nonNull(userInfo)) { - List resourceVOList = getResourceListByUserName(userInfo.getUserName()); - if (CollectionUtils.isNotEmpty(resourceVOList)) { - List menuInfoList = new ArrayList<>(); - resourceService.getMenuInfo(menuInfoList, resourceVOList, null); - return new PermissionMenuVO(menuInfoList, getAuthPerm(resourceVOList), getAllAuthPerms()); - } + if (Objects.isNull(userInfo)) { + return null; } - return null; + + List resourceVOList = getResourceListByUserName(userInfo.getUserName()); + if (CollectionUtils.isEmpty(resourceVOList)) { + return null; + } + + List 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 Set getAuthPermByUserName(final String userName) { /** * get resource by username. * - * @param userName user name + * @param userName username * @return {@linkplain List} */ private List getResourceListByUserName(final String userName) { @@ -117,17 +120,20 @@ private List getResourceListByUserName(final String userName) { List roleIds = userRoleDOList.stream().filter(Objects::nonNull) .map(UserRoleDO::getRoleId) .collect(Collectors.toList()); + Set 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 @@ private List getAuthPerm(final List resourceVOList) { */ private List 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 71306157cf1d..2c04d2f063ca 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 String createOrUpdate(final PluginDTO pluginDTO) { 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 String createOrUpdate(final PluginDTO pluginDTO) { @Override @Transactional(rollbackFor = Exception.class) public String delete(final List ids) { + // 1. select plugin id. List plugins = Optional.ofNullable(this.pluginMapper.selectByIds(ids)) .orElse(Collections.emptyList()); final List pluginIds = plugins.stream() @@ -144,11 +146,13 @@ public String delete(final List ids) { 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 selectorIds = Optional.ofNullable(this.selectorMapper.findByPluginIds(pluginIds)) .orElse(Collections.emptyList()) .stream().map(SelectorDO::getId).collect(Collectors.toList()); @@ -159,20 +163,25 @@ public String delete(final List ids) { this.selectorConditionMapper.deleteBySelectorIds(selectorIds); // delete all rules final List 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 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 String enabled(final List ids, final Boolean enabled) { 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 String selectIdByName(final String name) { Objects.requireNonNull(pluginDO); return pluginDO.getId(); } - + /** * Find by name plugin do. * @@ -259,7 +269,7 @@ public String selectIdByName(final String name) { 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 c7f240b9b7f0..93e4727a8b20 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 void createResource(final ResourceDO resourceDO) { } /** - * create or update resource. + * create or update resource. * * @param resourceDTO {@linkplain ResourceDTO} * @return rows int @@ -152,11 +153,10 @@ public List listByTitles(final List titles) { @Override @Pageable public CommonPager 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 CommonPager listByPage(final ResourceQuery resourceQuery) { @Override public List getMenuTree() { List resourceVOList = resourceMapper.selectAll().stream().map(ResourceVO::buildResourceVO).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(resourceVOList)) { - List menuInfoList = new ArrayList<>(); - getMenuInfo(menuInfoList, resourceVOList, null); - return menuInfoList; + if (CollectionUtils.isEmpty(resourceVOList)) { + return null; } - return null; + + List menuInfoList = new ArrayList<>(); + getMenuInfo(menuInfoList, resourceVOList, null); + return menuInfoList; } /** @@ -192,17 +193,20 @@ public List findByParentId(final String id) { * 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 menuInfoList, final List metaList, final MenuInfo menuInfo) { + public void getMenuInfo(final List menuInfoList, + final List 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 void getMenuInfo(final List menuInfoList, final List deleteResourceIds, final List resourceIds, final List 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 8bc328a93ae4..4158a3d67818 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 int delete(final List ids) { @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 RoleVO findByQuery(final String roleName) { @Override @Pageable public CommonPager 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 CommonPager listByPage(final RoleQuery roleQuery) { */ @Override public List 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 List selectAll() { * @return {@linkplain PermissionInfo} */ private PermissionInfo getAllPermissions() { - List resourceVOList = resourceMapper.selectAll().stream().map(ResourceVO::buildResourceVO).collect(Collectors.toList()); + List resourceVOList = resourceMapper.selectAll() + .stream() + .map(ResourceVO::buildResourceVO) + .collect(Collectors.toList()); List permissionIds = resourceVOList.stream().map(ResourceVO::getId).collect(Collectors.toList()); + List treeList = new ArrayList<>(); getTreeModelList(treeList, resourceVOList, null); return PermissionInfo.builder().treeList(treeList).permissionIds(permissionIds).build(); @@ -163,17 +175,22 @@ private PermissionInfo getAllPermissions() { * @return {@linkplain List} */ private List 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 treeList, final List metaList, final ResourceInfo resourceInfo) { + private void getTreeModelList(final List treeList, + final List metaList, + final ResourceInfo resourceInfo) { for (ResourceVO resourceVO : metaList) { String parentId = resourceVO.getParentId(); ResourceInfo resourceInfoItem = ResourceInfo.buildResourceInfo(resourceVO); @@ -195,7 +212,7 @@ private void getTreeModelList(final List treeList, final List getListDiff(final List preList, final List if (CollectionUtils.isEmpty(lastList)) { return null; } + if (CollectionUtils.isEmpty(preList)) { return lastList; } + Map 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 @@ private void deleteByObjectIdAndResourceId(final PermissionQuery permissionQuery /** * 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 currentPermissionList) { @@ -241,6 +260,7 @@ private void manageRolePermission(final String roleId, final List curren if (CollectionUtils.isNotEmpty(addPermission)) { batchSavePermission(addPermission.stream().map(node -> PermissionDO.buildPermissionDO(PermissionDTO.builder().objectId(roleId).resourceId(node).build())).collect(Collectors.toList())); } + List 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 b174cbdb551c..6220b21cb1e1 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 String registerDefault(final RuleDTO ruleDTO) { if (Objects.nonNull(exist)) { return ""; } + RuleDO ruleDO = RuleDO.buildRuleDO(ruleDTO); List ruleConditions = ruleDTO.getRuleConditions(); if (StringUtils.isEmpty(ruleDTO.getId())) { @@ -236,21 +237,23 @@ private void publishEvent(final RuleDO ruleDO, final List rule } private RuleData buildRuleData(final RuleDO ruleDO) { - // query for conditions - List 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 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 fdb38974a296..2f9b33bd946b 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 Integer deleteShenyuDicts(final List ids) { @Override public Integer enabled(final List 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 23227371ddd9..0ac88602c1e7 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 SyncDataServiceImpl(final AppAuthService appAuthService, @Override public boolean syncAll(final DataEventTypeEnum type) { appAuthService.syncData(); + List pluginDataList = pluginService.listAll(); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.PLUGIN, type, pluginDataList)); + List selectorDataList = selectorService.listAll(); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, type, selectorDataList)); + List ruleDataList = ruleService.listAll(); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.RULE, type, ruleDataList)); + metaDataService.syncData(); + return true; } @@ -98,16 +103,22 @@ public boolean syncPluginData(final String pluginId) { PluginVO pluginVO = pluginService.findById(pluginId); eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.PLUGIN, DataEventTypeEnum.UPDATE, Collections.singletonList(PluginTransfer.INSTANCE.mapDataTOVO(pluginVO)))); + List selectorDataList = selectorService.findByPluginId(pluginId); - if (CollectionUtils.isNotEmpty(selectorDataList)) { - eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, DataEventTypeEnum.REFRESH, selectorDataList)); - List allRuleDataList = new ArrayList<>(); - for (SelectorData selectData : selectorDataList) { - List 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 allRuleDataList = new ArrayList<>(); + for (SelectorData selectData : selectorDataList) { + List 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 980fe67abca7..197470c28f70 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 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 UpstreamCheckService(final SelectorMapper selectorMapper, final Applicati setup(); } } - + /** * Set up. */ @@ -134,24 +138,27 @@ public void setup() { 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 void close() { 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 upstreams = UPSTREAM_MAP.getOrDefault(selectorId, Collections.emptyList()); Optional exists = upstreams.stream().filter(item -> StringUtils.isNotBlank(item.getUpstreamUrl()) @@ -184,15 +192,15 @@ public void submit(final String selectorId, final CommonUpstream commonUpstream) 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 commonUpstreams) { - if (!"http".equalsIgnoreCase(registerType)) { + if (!REGISTER_TYPE_HTTP.equalsIgnoreCase(registerType)) { return; } UPSTREAM_MAP.put(selectorId, commonUpstreams); @@ -268,20 +276,25 @@ private void updateHandler(final String selectorId, final List u private void updateSelectorHandler(final String selectorId, final List 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 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 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 void fetchUpstreamData() { } pluginDOList.stream().filter(Objects::nonNull).forEach(pluginDO -> { final List 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 17cabb31f6c4..fac905c2228d 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/ShiroConfiguration.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/config/ShiroConfiguration.java index 0484d06d1493..0e2efe3e874e 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/config/ShiroConfiguration.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/shiro/config/ShiroConfiguration.java @@ -24,6 +24,7 @@ import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -94,6 +95,18 @@ public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor( return authorizationAttributeSourceAdvisor; } + /** + * Support shiro annotation. + * + * @return DefaultAdvisorAutoProxyCreator. + */ + @Bean + public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() { + DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); + defaultAdvisorAutoProxyCreator.setProxyTargetClass(true); + return defaultAdvisorAutoProxyCreator; + } + /** * shiro's lifecycle in spring. * 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 26ecacf74281..ef98d30a7cd0 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.subject.PrincipalCollection; import org.springframework.stereotype.Service; +import java.util.Objects; import java.util.Set; /** @@ -83,7 +84,7 @@ protected AuthenticationInfo doGetAuthenticationInfo(final AuthenticationToken a } 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 8d7688c53693..95dda8bfb7d0 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"; diff --git a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/DashboardUserControllerTest.java b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/DashboardUserControllerTest.java index ed616f9ee546..4220ef055a03 100644 --- a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/DashboardUserControllerTest.java +++ b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/DashboardUserControllerTest.java @@ -98,7 +98,6 @@ public void queryDashboardUsers() throws Exception { mockMvc.perform(get(url)) .andExpect(status().isOk()) .andExpect(jsonPath("$.message", is(ShenyuResultMessage.QUERY_SUCCESS))) - .andExpect(jsonPath("$.data.dataList[0].password", is("123456"))) .andReturn(); final CommonPager commonPagerError = new CommonPager<>(new PageParameter(), @@ -121,8 +120,7 @@ public void detailDashboardUser() throws Exception { final String url = "/dashboardUser/1"; mockMvc.perform(get(url)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.message", is(ShenyuResultMessage.DETAIL_SUCCESS))) - .andExpect(jsonPath("$.data.password", is(""))); + .andExpect(jsonPath("$.message", is(ShenyuResultMessage.DETAIL_SUCCESS))); given(dashboardUserService.findById(any())).willReturn(null); mockMvc.perform(get(url))