From 0eb14f1bf49b4e2abce1b91a19d07a90bb6533b8 Mon Sep 17 00:00:00 2001 From: cj Date: Fri, 13 May 2022 13:07:57 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E4=B8=80=E7=82=B9=E5=BE=AE=E4=B8=8D?= =?UTF-8?q?=E8=B6=B3=E9=81=93=E7=9A=84=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/PigxTokenDealServiceImpl.java | 12 ++++++++++-- .../datascope/PigxDefaultDatascopeHandle.java | 16 ++++++++++++++-- .../service/PigxUserDetailsService.java | 19 +++++++++++++++---- .../admin/api/feign/RemoteTokenService.java | 3 ++- .../bi/config/JimuReportTokenService.java | 12 +++++++----- .../pigx/mp/config/WxMpInitConfigRunner.java | 13 +++++++++++-- 6 files changed, 59 insertions(+), 16 deletions(-) diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/service/PigxTokenDealServiceImpl.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/service/PigxTokenDealServiceImpl.java index 7db16c0f8..e379d8ac1 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/service/PigxTokenDealServiceImpl.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/service/PigxTokenDealServiceImpl.java @@ -8,6 +8,7 @@ import com.pig4cloud.pigx.common.core.constant.CacheConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.KeyStrResolver; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.core.util.RetOps; import com.pig4cloud.pigx.common.core.util.SpringContextHolder; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,6 +27,7 @@ import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -85,10 +87,16 @@ public class PigxTokenDealServiceImpl { * @return R */ public R queryTokenByUsername(Page page, String username) { - List oAuth2AccessTokenList = clientDetailsService - .listClientDetails(SecurityConstants.FROM_IN).getData().stream().map(SysOauthClientDetails::getClientId) + // @formatter:off + List oAuth2AccessTokenList = + RetOps.of(clientDetailsService.listClientDetails(SecurityConstants.FROM_IN)) + .getData() + .orElseGet(Collections::emptyList) + .stream().map(SysOauthClientDetails::getClientId) .flatMap(clientId -> tokenStore.findTokensByClientIdAndUserName(clientId, username).stream()).distinct() .collect(Collectors.toList()); + // @formatter:on + page.setRecords(oAuth2AccessTokenList); page.setTotal(oAuth2AccessTokenList.size()); return R.ok(page); diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/PigxDefaultDatascopeHandle.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/PigxDefaultDatascopeHandle.java index c85337407..f5f494da9 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/PigxDefaultDatascopeHandle.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/PigxDefaultDatascopeHandle.java @@ -23,12 +23,14 @@ import com.pig4cloud.pigx.admin.api.entity.SysDeptRelation; import com.pig4cloud.pigx.admin.api.entity.SysRole; import com.pig4cloud.pigx.admin.api.feign.RemoteDataScopeService; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.core.util.RetOps; import com.pig4cloud.pigx.common.security.service.PigxUser; import com.pig4cloud.pigx.common.security.util.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -59,8 +61,13 @@ public class PigxDefaultDatascopeHandle implements DataScopeHandle { if (CollectionUtil.isEmpty(roleIdList)) { return false; } - SysRole role = dataScopeService.getRoleList(roleIdList).getData().stream() + // @formatter:off + SysRole role = RetOps.of(dataScopeService.getRoleList(roleIdList)) + .getData() + .orElseGet(Collections::emptyList) + .stream() .min(Comparator.comparingInt(SysRole::getDsType)).orElse(null); + // @formatter:on // 角色有可能已经删除了 if (role == null) { return false; @@ -78,8 +85,13 @@ public class PigxDefaultDatascopeHandle implements DataScopeHandle { } // 查询本级及其下级 if (DataScopeTypeEnum.OWN_CHILD_LEVEL.getType() == dsType) { - List deptIdList = dataScopeService.getDescendantList(user.getDeptId()).getData().stream() + // @formatter:off + List deptIdList = RetOps.of(dataScopeService.getDescendantList(user.getDeptId())) + .getData() + .orElseGet(Collections::emptyList) + .stream() .map(SysDeptRelation::getDescendant).collect(Collectors.toList()); + // @formatter:on deptList.addAll(deptIdList); } // 只查询本级 diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsService.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsService.java index ee78b9e5e..692644485 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsService.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsService.java @@ -22,6 +22,7 @@ import com.pig4cloud.pigx.admin.api.entity.SysUser; import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.core.util.RetOps; import org.springframework.core.Ordered; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; @@ -62,13 +63,23 @@ public interface PigxUserDetailsService extends UserDetailsService, Ordered { * 构建userdetails * @param result 用户信息 * @return UserDetails + * @throws UsernameNotFoundException */ default UserDetails getUserDetails(R result) { - if (result == null || result.getData() == null) { - throw new UsernameNotFoundException("用户不存在"); - } + // @formatter:off + return RetOps.of(result) + .getData() + .map(this::convertUserDetails) + .orElseThrow(() -> new UsernameNotFoundException("用户不存在")); + // @formatter:on + } - UserInfo info = result.getData(); + /** + * UserInfo 转 UserDetails + * @param info + * @return 返回UserDetails对象 + */ + default UserDetails convertUserDetails(UserInfo info) { Set dbAuthsSet = new HashSet<>(); if (ArrayUtil.isNotEmpty(info.getRoles())) { // 获取角色 diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java index 20f4eba1a..f541adc2a 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java @@ -62,6 +62,7 @@ public interface RemoteTokenService { * @return */ @GetMapping("/token/query-token") - R queryToken(@RequestParam("token") String token, @RequestHeader(SecurityConstants.FROM) String from); + R> queryToken(@RequestParam("token") String token, + @RequestHeader(SecurityConstants.FROM) String from); } diff --git a/pigx-visual/pigx-jimu-platform/src/main/java/com/pig4cloud/pigx/bi/config/JimuReportTokenService.java b/pigx-visual/pigx-jimu-platform/src/main/java/com/pig4cloud/pigx/bi/config/JimuReportTokenService.java index edab3658c..8d3065542 100644 --- a/pigx-visual/pigx-jimu-platform/src/main/java/com/pig4cloud/pigx/bi/config/JimuReportTokenService.java +++ b/pigx-visual/pigx-jimu-platform/src/main/java/com/pig4cloud/pigx/bi/config/JimuReportTokenService.java @@ -4,6 +4,7 @@ import com.pig4cloud.pigx.admin.api.feign.RemoteTokenService; import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.core.util.RetOps; import lombok.RequiredArgsConstructor; import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; import org.springframework.stereotype.Component; @@ -24,11 +25,12 @@ public class JimuReportTokenService implements JmReportTokenServiceI { @Override public String getUsername(String token) { - R> result = tokenService.queryToken(token, SecurityConstants.FROM_IN); - if (CommonConstants.SUCCESS.equals(result.getCode())) { - return (String) result.getData().get("username"); - } - return null; + // @formatter:off + return RetOps.of(tokenService.queryToken(token, SecurityConstants.FROM_IN)) + .getDataIf(RetOps.CODE_SUCCESS) + .map(o -> (String)o.get("username")) + .orElse(null); + // @formatter:off } @Override diff --git a/pigx-visual/pigx-mp-platform/src/main/java/com/pig4cloud/pigx/mp/config/WxMpInitConfigRunner.java b/pigx-visual/pigx-mp-platform/src/main/java/com/pig4cloud/pigx/mp/config/WxMpInitConfigRunner.java index 840769970..0cf2cb254 100755 --- a/pigx-visual/pigx-mp-platform/src/main/java/com/pig4cloud/pigx/mp/config/WxMpInitConfigRunner.java +++ b/pigx-visual/pigx-mp-platform/src/main/java/com/pig4cloud/pigx/mp/config/WxMpInitConfigRunner.java @@ -4,6 +4,7 @@ import com.google.common.collect.Maps; import com.pig4cloud.pigx.admin.api.feign.RemoteTenantService; import com.pig4cloud.pigx.common.core.constant.CacheConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.core.util.RetOps; import com.pig4cloud.pigx.common.data.tenant.TenantBroker; import com.pig4cloud.pigx.mp.entity.WxAccount; import com.pig4cloud.pigx.mp.handler.*; @@ -23,6 +24,8 @@ import org.springframework.data.redis.listener.RedisMessageListenerContainer; import javax.annotation.PostConstruct; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -85,8 +88,14 @@ public class WxMpInitConfigRunner { public void initServices() { // 获取全部租户 遍历所有租户对应的公众号列表 List accountList = new ArrayList<>(); - tenantService.list(SecurityConstants.FROM_IN).getData().forEach( - tenant -> TenantBroker.runAs(tenant.getId(), (id) -> accountList.addAll(accountService.list()))); + // @formatter:off + RetOps.of(tenantService.list(SecurityConstants.FROM_IN)) + .getData() + .orElseGet(Collections::emptyList) + .forEach( + tenant -> TenantBroker.runAs(tenant.getId(), (id) -> accountList.addAll(accountService.list())) + ); + // @formatter:on mpServices = accountList.stream().map(a -> { WxMpInRedisConfigStorage configStorage = new WxMpInRedisConfigStorage(redisTemplate);