From 1233a3eb51efbbb7b3c43a162b93182eaefdda63 Mon Sep 17 00:00:00 2001 From: Cruyse <742557672@163.com> Date: Tue, 6 May 2025 09:01:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=BA=86=E7=83=AD=E7=BA=BF-=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BA=A4=E6=8D=A2=E5=8A=9F=E8=83=BD=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/RemoteJobDataExchangeService.java | 10 ++ .../auth/configure/CustomTokenServices.java | 56 ++++++- .../FebsAuthorizationServerConfigure.java | 6 + ruoyi-common/ruoyi-common-core/pom.xml | 25 +++ .../core/domain/vo/TransportHeader.java | 145 ++++++++++++++++++ .../core/domain/vo/TransportRequest.java | 24 +++ .../core/domain/vo/TransportRequestInfo.java | 12 ++ .../core/domain/vo/TransportResponse.java | 27 ++++ .../main/java/com/ruoyi/job/task/RyTask.java | 10 ++ .../service/impl/DatabaseServiceImpl.java | 2 +- .../impl/ServiceBusinessServiceImpl.java | 3 +- 11 files changed, 311 insertions(+), 9 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportHeader.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportRequest.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportRequestInfo.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportResponse.java diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteJobDataExchangeService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteJobDataExchangeService.java index 5d214ed..3e2d62b 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteJobDataExchangeService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteJobDataExchangeService.java @@ -36,4 +36,14 @@ public interface RemoteJobDataExchangeService */ @GetMapping("/packageResolve") public R filePackageResolve(@RequestParam("exchangeResolveId") String params, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception; + + /** + * + * @param params 参数 文件解析配置主键 + * @param source 请求来源 + * @return 结果 + * @throws Exception + */ + @GetMapping("/inBusiness") + public R inBusiness(@RequestParam("exchangeResolveId") String params, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception; } diff --git a/ruoyi-auth/src/main/java/cc/mrbird/febs/auth/configure/CustomTokenServices.java b/ruoyi-auth/src/main/java/cc/mrbird/febs/auth/configure/CustomTokenServices.java index 97780b9..a982fc7 100644 --- a/ruoyi-auth/src/main/java/cc/mrbird/febs/auth/configure/CustomTokenServices.java +++ b/ruoyi-auth/src/main/java/cc/mrbird/febs/auth/configure/CustomTokenServices.java @@ -43,6 +43,14 @@ public class CustomTokenServices extends DefaultTokenServices { private AuthenticationManager authenticationManager; + // 新增TransportClient依赖 + private TransportClient transportClient; + + // 新增TransportClient的setter方法 + public void setTransportClient(TransportClient transportClient) { + this.transportClient = transportClient; + } + @Override public OAuth2AccessToken createAccessToken(OAuth2Authentication authentication) throws AuthenticationException { OAuth2AccessToken existingAccessToken = tokenStore.getAccessToken(authentication); @@ -97,7 +105,22 @@ public class CustomTokenServices extends DefaultTokenServices { return null; } int validitySeconds = getRefreshTokenValiditySeconds(authentication.getOAuth2Request()); - String tokenValue = new String(Base64.encodeBase64URLSafe(DEFAULT_TOKEN_GENERATOR.generateKey()), US_ASCII); + // 修改点1:根据认证模式区分来源 + String grantType = authentication.getOAuth2Request().getGrantType(); + boolean isClientCredential = "client_credentials".equals(grantType); + + String tokenValue = ""; + if(isClientCredential) { + try { + tokenValue = transportClient.getToken(); // 假设TransportClient有getToken()方法 + } catch (Exception e) { + e.printStackTrace(); + throw new AuthenticationException("Failed to generate token via TransportClient", e) {}; + } + } else { + tokenValue = new String(Base64.encodeBase64URLSafe(DEFAULT_TOKEN_GENERATOR.generateKey()), US_ASCII); + } + if (validitySeconds > 0) { return new DefaultExpiringOAuth2RefreshToken(tokenValue, new Date(System.currentTimeMillis() + (validitySeconds * 1000L))); @@ -106,11 +129,19 @@ public class CustomTokenServices extends DefaultTokenServices { } private OAuth2AccessToken createAccessToken(OAuth2Authentication authentication, OAuth2RefreshToken refreshToken) { - String sourceType = ServletUtils.getRequest().getHeader("SourceType"); - // 第三方客户端调用 - if(StringUtils.isEmpty(sourceType)) { - sourceType = "data_exchange"; - } + + // 修改点1:根据认证模式区分来源 + String grantType = authentication.getOAuth2Request().getGrantType(); + boolean isClientCredential = "client_credentials".equals(grantType); + + // 修改点2:优先通过认证模式判断 + String sourceType = isClientCredential ? "data_exchange_feign" : "data_exchange_login"; + +// String sourceType = ServletUtils.getRequest().getHeader("SourceType"); +// // 第三方客户端调用 +// if(StringUtils.isEmpty(sourceType)) { +// sourceType = "data_exchange"; +// } //密码模式 // if(authentication.getUserAuthentication() != null && authentication.getUserAuthentication() instanceof UsernamePasswordAuthenticationToken) { // UsernamePasswordAuthenticationToken userAuthentication = (UsernamePasswordAuthenticationToken) authentication.getUserAuthentication(); @@ -118,8 +149,19 @@ public class CustomTokenServices extends DefaultTokenServices { // LinkedHashMap details = (LinkedHashMap) userAuthentication.getDetails(); // sourceType = details.get("sourceType") + "_"; // } + String tokenValue = ""; + if(isClientCredential) { + try { + tokenValue = transportClient.getToken(); // 假设TransportClient有getToken()方法 + } catch (Exception e) { + e.printStackTrace(); + throw new AuthenticationException("Failed to generate token via TransportClient", e) {}; + } + } else { + tokenValue = new String(Base64.encodeBase64URLSafe(DEFAULT_TOKEN_GENERATOR.generateKey()), US_ASCII); + } + - String tokenValue = new String(Base64.encodeBase64URLSafe(DEFAULT_TOKEN_GENERATOR.generateKey()), US_ASCII); DefaultOAuth2AccessToken token = new DefaultOAuth2AccessToken(sourceType + "_" + tokenValue); int validitySeconds = getAccessTokenValiditySeconds(authentication.getOAuth2Request()); if (validitySeconds > 0) { diff --git a/ruoyi-auth/src/main/java/cc/mrbird/febs/auth/configure/FebsAuthorizationServerConfigure.java b/ruoyi-auth/src/main/java/cc/mrbird/febs/auth/configure/FebsAuthorizationServerConfigure.java index 3375725..ec248f9 100644 --- a/ruoyi-auth/src/main/java/cc/mrbird/febs/auth/configure/FebsAuthorizationServerConfigure.java +++ b/ruoyi-auth/src/main/java/cc/mrbird/febs/auth/configure/FebsAuthorizationServerConfigure.java @@ -95,6 +95,7 @@ public class FebsAuthorizationServerConfigure extends AuthorizationServerConfigu tokenServices.setTokenStore(tokenStore()); tokenServices.setSupportRefreshToken(true); tokenServices.setClientDetailsService(redisClientDetailsService); + tokenServices.setTransportClient(transportClient()); return tokenServices; } @@ -132,4 +133,9 @@ public class FebsAuthorizationServerConfigure extends AuthorizationServerConfigu List granters = new ArrayList<>(Collections.singletonList(endpoints.getTokenGranter()));// 获取默认的granter集合 return new CompositeTokenGranter(granters); } + + @Bean + public TransportClient transportClient() { + return new TransportClient(); // 根据实际实现初始化 + } } diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index efdc381..6f534c4 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -153,6 +153,31 @@ mybatis-plus-boot-starter 3.5.3.2 + + + + com.squareup.okhttp3 + okhttp + 4.12.0 + + + + org.bouncycastle + bcprov-jdk15on + 1.70 + + + + com.google.code.gson + gson + 2.8.9 + + + + cn.cttic + tssh-crypto + 1.0 + diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportHeader.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportHeader.java new file mode 100644 index 0000000..28c9f8e --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportHeader.java @@ -0,0 +1,145 @@ +package com.ruoyi.common.core.domain.vo; + +import com.google.gson.annotations.SerializedName; + +public class TransportHeader { + @SerializedName("SerialNum") + private String serialNumber; + @SerializedName("SystemId") + private String systemId; + @SerializedName("Source") + private String source; + @SerializedName("Target") + private String target; + @SerializedName("Version") + private String version; + @SerializedName("IPCType") + private String ipcType; + @SerializedName("ReqTime") + private String reqTime; + @SerializedName("CRC") + private String crc; + @SerializedName("ReqType") + private String reqType; + @SerializedName("Token") + private String token; + @SerializedName("Code") + private String code; + @SerializedName("Message") + private String message; + + public TransportHeader(String serialNumber, String systemId, String source, + String target, String version, String ipcType, + String reqTime, String crc, String reqType, + String token, String code, String message) { + // 实际字段初始化(原构造器实现为空) + this.serialNumber = serialNumber; + this.systemId = systemId; + this.source = source; + this.target = target; + this.version = version; + this.ipcType = ipcType; + this.reqTime = reqTime; + this.crc = crc; + this.reqType = reqType; + this.token = token; + this.code = code; + this.message = message; + } + + public String getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + this.serialNumber = serialNumber; + } + + public String getSystemId() { + return systemId; + } + + public void setSystemId(String systemId) { + this.systemId = systemId; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getIpcType() { + return ipcType; + } + + public void setIpcType(String ipcType) { + this.ipcType = ipcType; + } + + public String getReqTime() { + return reqTime; + } + + public void setReqTime(String reqTime) { + this.reqTime = reqTime; + } + + public String getCrc() { + return crc; + } + + public void setCrc(String crc) { + this.crc = crc; + } + + public String getReqType() { + return reqType; + } + + public void setReqType(String reqType) { + this.reqType = reqType; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} \ No newline at end of file diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportRequest.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportRequest.java new file mode 100644 index 0000000..07e7f87 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportRequest.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.core.domain.vo; + +import com.google.gson.annotations.SerializedName; + +// 数据模型类 +public class TransportRequest { + @SerializedName("Header") + private TransportHeader header; + @SerializedName("Body") + private String body; + + public TransportRequest(TransportHeader header, String body) { + this.header = header; + this.body = body; + } + + public TransportHeader getHeader() { + return header; + } + + public void setHeader(TransportHeader header) { + this.header = header; + } +} \ No newline at end of file diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportRequestInfo.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportRequestInfo.java new file mode 100644 index 0000000..26516ac --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportRequestInfo.java @@ -0,0 +1,12 @@ +package com.ruoyi.common.core.domain.vo; + +import com.google.gson.annotations.SerializedName; + +public class TransportRequestInfo { + @SerializedName("reqInfo") + private Object reqInfo; + + public TransportRequestInfo(Object reqInfo) { + this.reqInfo = reqInfo; + } +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportResponse.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportResponse.java new file mode 100644 index 0000000..b0a73ad --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/vo/TransportResponse.java @@ -0,0 +1,27 @@ +package com.ruoyi.common.core.domain.vo; + +import com.google.gson.annotations.SerializedName; + +public class TransportResponse { + @SerializedName("Header") + private TransportHeader header; + @SerializedName("Body") + private String body; + // getters & setters... + + public TransportHeader getHeader() { + return header; + } + + public void setHeader(TransportHeader header) { + this.header = header; + } + + public Object getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } +} diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/RyTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/RyTask.java index cccc752..7c8bd57 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/RyTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/RyTask.java @@ -49,4 +49,14 @@ public class RyTask public void ryRemotePackageResolve(String params) throws Exception { remoteJobDataExchangeService.filePackageResolve(params, SecurityConstants.INNER); } + + + /** + * 远程调用打包解析 + * @param params 文件解析配置主键 + * @throws Exception + */ + public void ryRemoteInBusinessResolve(String params) throws Exception { + remoteJobDataExchangeService.inBusiness(params, SecurityConstants.INNER); + } } diff --git a/ruoyi-modules/ruoyi-system-dataexchange/src/main/java/com/ruoyi/business/service/impl/DatabaseServiceImpl.java b/ruoyi-modules/ruoyi-system-dataexchange/src/main/java/com/ruoyi/business/service/impl/DatabaseServiceImpl.java index e84a054..b2d2e61 100644 --- a/ruoyi-modules/ruoyi-system-dataexchange/src/main/java/com/ruoyi/business/service/impl/DatabaseServiceImpl.java +++ b/ruoyi-modules/ruoyi-system-dataexchange/src/main/java/com/ruoyi/business/service/impl/DatabaseServiceImpl.java @@ -290,7 +290,7 @@ public class DatabaseServiceImpl extends ServiceImpl i Connection conn = getConnection(database.getId(), null); //只查询jr开头的和sc_开头的表 String sqlStr = "select table_name `name`, table_comment as `remark` " + - "from information_schema.TABLES where TABLE_SCHEMA =? AND (table_name like 'jr_%' OR table_name like 'sc_%')"; + "from information_schema.TABLES where TABLE_SCHEMA =? AND (table_name like 'jr_%' OR table_name like 'sc_%' OR table_name like 'cq_%')"; PreparedStatement st = conn.prepareStatement(sqlStr); st.setString(1, database.getDbname()); ResultSet rs = st.executeQuery(); diff --git a/ruoyi-modules/ruoyi-system-dataexchange/src/main/java/com/ruoyi/business/service/impl/ServiceBusinessServiceImpl.java b/ruoyi-modules/ruoyi-system-dataexchange/src/main/java/com/ruoyi/business/service/impl/ServiceBusinessServiceImpl.java index 055981c..a107ff6 100644 --- a/ruoyi-modules/ruoyi-system-dataexchange/src/main/java/com/ruoyi/business/service/impl/ServiceBusinessServiceImpl.java +++ b/ruoyi-modules/ruoyi-system-dataexchange/src/main/java/com/ruoyi/business/service/impl/ServiceBusinessServiceImpl.java @@ -56,9 +56,10 @@ public class ServiceBusinessServiceImpl extends ServiceImpl selectServiceBusinessList(ServiceBusiness serviceBusiness) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.apply(org.apache.commons.lang3.StringUtils.isNotEmpty(serviceBusiness.getType()), "FIND_IN_SET('" + serviceBusiness.getType() + "', type)"); queryWrapper .eq(ServiceBusiness::getServiceId, serviceBusiness.getServiceId()) - .eq(StringUtils.isNotEmpty(serviceBusiness.getType()),ServiceBusiness::getType,serviceBusiness.getType()) +// .eq(StringUtils.isNotEmpty(serviceBusiness.getType()),ServiceBusiness::getType,serviceBusiness.getType()) .eq(StringUtils.isNotEmpty(serviceBusiness.getHasAudit()),ServiceBusiness::getHasAudit,serviceBusiness.getHasAudit()) .like(StringUtils.isNotEmpty(serviceBusiness.getOutName()),ServiceBusiness::getOutName,serviceBusiness.getOutName()) .like(StringUtils.isNotEmpty(serviceBusiness.getDatabaseName()),ServiceBusiness::getDatabaseName,serviceBusiness.getDatabaseName())