diff --git a/cf-framework/cf-spring-boot-starter-biz-organ/src/main/java/com/cf/imes/framework/organ/core/security/OrganSecurityWebFilter.java b/cf-framework/cf-spring-boot-starter-biz-organ/src/main/java/com/cf/imes/framework/organ/core/security/OrganSecurityWebFilter.java index e189fc7c1..fc54c41d5 100644 --- a/cf-framework/cf-spring-boot-starter-biz-organ/src/main/java/com/cf/imes/framework/organ/core/security/OrganSecurityWebFilter.java +++ b/cf-framework/cf-spring-boot-starter-biz-organ/src/main/java/com/cf/imes/framework/organ/core/security/OrganSecurityWebFilter.java @@ -65,7 +65,8 @@ public class OrganSecurityWebFilter extends ApiRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { - Long organId = OrganContextHolder.getOrganId(); + Long organId = WebFrameworkUtils.getOrganId(request); + //Long organId = OrganContextHolder.getOrganId(); boolean isRpcRequest = WebFrameworkUtils.isRpcRequest(request); // 1. 登陆的用户,校验是否有权限访问该组织,避免越权问题。 LoginUser user = SecurityFrameworkUtils.getLoginUser(); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application.yaml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application.yaml index 841fb7705..15d2861c8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application.yaml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application.yaml @@ -151,6 +151,7 @@ chenfeng: organ: # 多组织相关配置项 enable: true ignore-urls: + - /rpc-api/** ignore-tables: sms-code: # 短信验证码相关的配置项 expire-times: 10m diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/application.yaml b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/application.yaml index a96954148..83d2ee02e 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/application.yaml +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/application.yaml @@ -151,7 +151,7 @@ chenfeng: organ: # 多组织相关配置项 enable: true ignore-urls: - - /admin-api/manage/test + - /rpc-api/** ignore-tables: - test sms-code: # 短信验证码相关的配置项 diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/resources/application.yaml b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/resources/application.yaml index eb339d464..c376ca198 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/resources/application.yaml +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/resources/application.yaml @@ -151,6 +151,7 @@ chenfeng: organ: # 多组织相关配置项 enable: true ignore-urls: + - /rpc-api/** ignore-tables: sms-code: # 短信验证码相关的配置项 expire-times: 10m diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java index f600c2dcc..d13a97168 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java @@ -28,5 +28,9 @@ public class OAuth2AccessTokenCreateReqDTO implements Serializable { @Schema(description = "授权范围的数组", example = "user_info") private List scopes; + @Schema(description = "组织id") + private Long organId; + @Schema(description = "数据源标识") + private String dataCode; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApiImpl.java index 5ed9dc224..d4c6d8568 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApiImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApiImpl.java @@ -40,14 +40,15 @@ public class OAuth2TokenApiImpl implements OAuth2TokenApi { throw new ServerException(10023,"组织不存在"); }*/ OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken( - reqDTO.getUserId(), reqDTO.getUserType(), reqDTO.getClientId(), reqDTO.getScopes(), null, null, null, null); + reqDTO.getUserId(), reqDTO.getUserType(), reqDTO.getClientId(), reqDTO.getScopes(), null, null, null, reqDTO.getDataCode(), reqDTO.getOrganId()); return success(BeanUtils.toBean(accessTokenDO, OAuth2AccessTokenRespDTO.class)); } @Override public CommonResult checkAccessToken(String accessToken) { OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.checkAccessToken(accessToken); - return success(BeanUtils.toBean(accessTokenDO, OAuth2AccessTokenCheckRespDTO.class)); + OAuth2AccessTokenCheckRespDTO bean = BeanUtils.toBean(accessTokenDO, OAuth2AccessTokenCheckRespDTO.class); + return success(bean); } @Override diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java index 82ada599b..6badaa874 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java @@ -1,6 +1,7 @@ package com.cf.imes.module.system.dal.dataobject.oauth2; import com.cf.imes.framework.common.enums.UserTypeEnum; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; import com.cf.imes.framework.organ.core.db.OrganBaseDO; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; @@ -25,7 +26,7 @@ import java.util.List; @KeySequence("system_oauth2_access_token_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @EqualsAndHashCode(callSuper = true) -public class OAuth2AccessTokenDO extends OrganBaseDO { +public class OAuth2AccessTokenDO extends BaseDO { /** * 编号,数据库递增 @@ -82,4 +83,6 @@ public class OAuth2AccessTokenDO extends OrganBaseDO { */ private String dataCode; + private Long organId; + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2RefreshTokenDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2RefreshTokenDO.java index 4dd0f7c12..ae5515268 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2RefreshTokenDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2RefreshTokenDO.java @@ -75,5 +75,9 @@ public class OAuth2RefreshTokenDO extends BaseDO { * 数据源编码 */ private String dataCode; + /** + * 组织id + */ + private Long organId; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/application/ApplicationServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/application/ApplicationServiceImpl.java index ec15e1573..46f92353d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/application/ApplicationServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/application/ApplicationServiceImpl.java @@ -133,6 +133,7 @@ public class ApplicationServiceImpl implements ApplicationService{ null, null, null, + null, null); // 构建返回结果 return AuthConvert.INSTANCE.convert(accessTokenDO); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java index 0b08c60bc..2336b7c65 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java @@ -130,7 +130,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { throw exception(ORGAN_DATA_CODE_NOT_EXISTS); } // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME, dataSourceCode); + return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME, dataSourceCode, user.getOrganId()); } @Override @@ -161,7 +161,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { } // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE, dataSourceCode); + return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE, dataSourceCode, organId); } private void createLoginLog(Long userId, String username, @@ -206,7 +206,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { } // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL, dataSourceCode); + return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL, dataSourceCode, organId); } @VisibleForTesting @@ -228,7 +228,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { } } - private AuthLoginRespVO createTokenAfterLoginSuccess(Long userId, String username, LoginLogTypeEnum logType, String dataCode) { + private AuthLoginRespVO createTokenAfterLoginSuccess(Long userId, String username, LoginLogTypeEnum logType, String dataCode, Long organId) { // 插入登陆日志 createLoginLog(userId, username, logType, LoginResultEnum.SUCCESS); /*Long organId = OrganContextHolder.getOrganId(); @@ -238,7 +238,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { }*/ // 创建访问令牌 OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, getUserType().getValue(), - OAuth2ClientConstants.CLIENT_ID_DEFAULT, null, null, null, null, dataCode); + OAuth2ClientConstants.CLIENT_ID_DEFAULT, null, null, null, null, dataCode, organId); // 构建返回结果 return AuthConvert.INSTANCE.convert(accessTokenDO); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2GrantServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2GrantServiceImpl.java index 245dd9a71..bacda0207 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2GrantServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2GrantServiceImpl.java @@ -47,7 +47,7 @@ public class OAuth2GrantServiceImpl implements OAuth2GrantService { if(Objects.isNull(organ)) { throw new ServerException(10023,"组织不存在"); }*/ - return oauth2TokenService.createAccessToken(userId, userType, clientId, scopes, null, null, null, null); + return oauth2TokenService.createAccessToken(userId, userType, clientId, scopes, null, null, null, null, null); } @Override @@ -85,7 +85,7 @@ public class OAuth2GrantServiceImpl implements OAuth2GrantService { // 创建访问令牌 return oauth2TokenService.createAccessToken(codeDO.getUserId(), codeDO.getUserType(), - codeDO.getClientId(), codeDO.getScopes(),null, null, null, null); + codeDO.getClientId(), codeDO.getScopes(),null, null, null, null, null); } @Override @@ -99,7 +99,7 @@ public class OAuth2GrantServiceImpl implements OAuth2GrantService { throw new ServerException(10023,"组织不存在"); }*/ // 创建访问令牌 - return oauth2TokenService.createAccessToken(user.getId(), UserTypeEnum.ADMIN.getValue(), clientId, scopes,null, null, null, null); + return oauth2TokenService.createAccessToken(user.getId(), UserTypeEnum.ADMIN.getValue(), clientId, scopes,null, null, null, null,null); } @Override diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenService.java index 83d02ada0..22da448ed 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenService.java @@ -27,7 +27,7 @@ public interface OAuth2TokenService { * @param scopes 授权范围 * @return 访问令牌的信息 */ - OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List scopes, Boolean large, Integer dbNo, Integer tableNo, String dataCode); + OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List scopes, Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId); /** * 刷新访问令牌 diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java index 59847d05c..ca438e40b 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java @@ -45,10 +45,10 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService { @Override @Transactional - public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List scopes,Boolean large, Integer dbNo, Integer tableNo, String dataCode) { + public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List scopes,Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId) { OAuth2ClientDO clientDO = oauth2ClientService.validOAuthClientFromCache(clientId); // 创建刷新令牌 - OAuth2RefreshTokenDO refreshTokenDO = createOAuth2RefreshToken(userId, userType, clientDO, scopes, large, dbNo, tableNo, dataCode); + OAuth2RefreshTokenDO refreshTokenDO = createOAuth2RefreshToken(userId, userType, clientDO, scopes, large, dbNo, tableNo, dataCode, organId); // 创建访问令牌 return createOAuth2AccessToken(refreshTokenDO, clientDO); } @@ -147,12 +147,13 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService { return accessTokenDO; } - private OAuth2RefreshTokenDO createOAuth2RefreshToken(Long userId, Integer userType, OAuth2ClientDO clientDO, List scopes, Boolean large, Integer dbNo, Integer tableNo, String dataCode) { + private OAuth2RefreshTokenDO createOAuth2RefreshToken(Long userId, Integer userType, OAuth2ClientDO clientDO, List scopes, Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId) { OAuth2RefreshTokenDO refreshToken = new OAuth2RefreshTokenDO().setRefreshToken(generateRefreshToken()) .setUserId(userId).setUserType(userType) .setClientId(clientDO.getClientId()).setScopes(scopes) .setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getRefreshTokenValiditySeconds())) .setLarge(large).setDbNo(dbNo).setTableNo(tableNo).setDataCode(dataCode) + .setOrganId(organId) ; oauth2RefreshTokenMapper.insert(refreshToken); return refreshToken; diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml index 17848700a..466e6f9ab 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml @@ -157,11 +157,13 @@ chenfeng: - /admin-api/system/label-template/* - /admin-api/system/machine-template/* - /admin-api/system/data-source/* - - /rpc-api/system/organ/valid # 防止递归。避免调用 /rpc-api/system/organ/valid 接口时,又去触发 /rpc-api/system/organ/valid 去校验 - - /rpc-api/system/organ/id-list # 获得组织列表的时候,无需传递组织编号 - - /rpc-api/system/error-code/* # 错误码的自动创建与下载的接口,无法带上组织编号 - - /rpc-api/system/oauth2/token/check # 访问令牌校验时,无需传递组织编号;主要解决上传文件的场景,前端不会传递 tenant-id! - - /rpc-api/system/permission/has-any-permissions + - /admin-api/system/auth/login + - /rpc-api/** + #- /rpc-api/system/organ/valid # 防止递归。避免调用 /rpc-api/system/organ/valid 接口时,又去触发 /rpc-api/system/organ/valid 去校验 + #- /rpc-api/system/organ/id-list # 获得组织列表的时候,无需传递组织编号 + #- /rpc-api/system/error-code/* # 错误码的自动创建与下载的接口,无法带上组织编号 + #- /rpc-api/system/oauth2/token/check # 访问令牌校验时,无需传递组织编号;主要解决上传文件的场景,前端不会传递 tenant-id! + #- /rpc-api/system/permission/has-any-permissions ignore-tables: - system_organization - system_tenant_package