From 8f8db544df07a7d5af1f2ccea28ce104effc4063 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 22 Jul 2026 17:30:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Eimes-token=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=BB=84=E7=BB=87id=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-local.yaml | 3 ++- .../controller/admin/auth/AuthController.java | 23 +++++++++++++++++-- .../mysql/tokenconfig/TokenConfigMapper.java | 3 ++- .../tokenconfig/TokenConfigService.java | 8 +++++++ .../tokenconfig/TokenConfigServiceImpl.java | 11 ++++++--- .../src/main/resources/application-dev.yaml | 3 ++- .../src/main/resources/application-local.yaml | 1 + .../src/main/resources/message_cht.properties | 4 +++- .../src/main/resources/message_en.properties | 4 +++- .../src/main/resources/message_zh.properties | 4 +++- .../admin/auth/AuthControllerTest.java | 17 ++++++++++++++ 11 files changed, 70 insertions(+), 11 deletions(-) diff --git a/cf-gateway/src/main/resources/application-local.yaml b/cf-gateway/src/main/resources/application-local.yaml index 85a4bac42..c132d2c63 100644 --- a/cf-gateway/src/main/resources/application-local.yaml +++ b/cf-gateway/src/main/resources/application-local.yaml @@ -22,10 +22,11 @@ logging: chenfeng: gateway: ignore-token-urls: + - /admin-api/system/auth/app-token/organ-id - /admin-api/executor/plate/wechat/miniprogram/cadview/info/* - /admin-api/executor/plate/wechat/miniprogram/cadview/order/info/* - /admin-api/executor/plate/wechat/miniprogram/cadview/order/details/* accessLogEnable: false access-log-ignore-urls: - /report/template - - /system/captcha/get \ No newline at end of file + - /system/captcha/get diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/AuthController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/AuthController.java index f646fc1be..b8c8241d5 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/AuthController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/AuthController.java @@ -14,9 +14,12 @@ import com.cf.imes.framework.security.config.SecurityProperties; import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import com.cf.imes.module.system.controller.admin.auth.vo.AuthAppTokenReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginReqVO; +import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginRespVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginSmsCheckReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthPermissionInfoRespVO; +import com.cf.imes.module.system.controller.admin.auth.vo.AuthSmsSendReqVO; import com.cf.imes.module.system.convert.auth.AuthConvert; import com.cf.imes.module.system.dal.dataobject.organ.OrganizationDO; import com.cf.imes.module.system.dal.dataobject.permission.MenuDO; @@ -29,9 +32,8 @@ import com.cf.imes.module.system.service.permission.MenuService; import com.cf.imes.module.system.service.permission.PermissionService; import com.cf.imes.module.system.service.permission.RoleService; import com.cf.imes.module.system.service.sms.SmsCodeService; +import com.cf.imes.module.system.service.tokenconfig.TokenConfigService; import com.cf.imes.module.system.service.user.AdminUserService; -import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginRespVO; -import com.cf.imes.module.system.controller.admin.auth.vo.AuthSmsSendReqVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -86,6 +88,9 @@ public class AuthController { @Resource private IPQueryService ipQueryService; + @Resource + private TokenConfigService tokenConfigService; + @PostMapping("/manage/login") @PermitAll @Operation(summary = "使用账号密码登录") @@ -120,6 +125,20 @@ public class AuthController { return success(authService.loginSmsCheck(reqVO)); } + /** + * 根据应用 Token 获取所属组织编号,供外部应用在未登录场景下识别组织。 + * + * @param reqVO 应用 Token 请求参数 + * @return 组织编号 + */ + @PostMapping("/app-token/organ-id") + @PermitAll + @Operation(summary = "根据应用 Token 获取组织编号") + @OperateLog(enable = false) + public CommonResult getOrganIdByAppToken(@Valid @RequestBody AuthAppTokenReqVO reqVO) { + return success(tokenConfigService.getOrganIdByAppToken(reqVO.getAppToken())); + } + @PostMapping("/logout") @PermitAll @Operation(summary = "登出系统") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/tokenconfig/TokenConfigMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/tokenconfig/TokenConfigMapper.java index aa559fb7c..6229245b4 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/tokenconfig/TokenConfigMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/tokenconfig/TokenConfigMapper.java @@ -47,7 +47,8 @@ public interface TokenConfigMapper extends BaseMapperX { default TokenConfigDO selectByToken(String token) { return selectOne(new LambdaQueryWrapperX() - .eq(TokenConfigDO::getAppToken,token)); + .eq(TokenConfigDO::getAppToken, token) + .eq(TokenConfigDO::getDeleted, false)); } void deleteTokenConfig(@Param("id") Long id); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/tokenconfig/TokenConfigService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/tokenconfig/TokenConfigService.java index df3c27d18..abadcfc27 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/tokenconfig/TokenConfigService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/tokenconfig/TokenConfigService.java @@ -57,6 +57,14 @@ public interface TokenConfigService { */ Long checkTokenConfig(String token); + /** + * 根据数据库中存储的应用 Token 获取所属组织编号。 + * + * @param appToken 应用 Token + * @return 组织编号 + */ + Long getOrganIdByAppToken(String appToken); + /** * 复制token * diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/tokenconfig/TokenConfigServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/tokenconfig/TokenConfigServiceImpl.java index 1547877b8..0d544c20d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/tokenconfig/TokenConfigServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/tokenconfig/TokenConfigServiceImpl.java @@ -207,8 +207,13 @@ public class TokenConfigServiceImpl implements TokenConfigService{ @Override public Long checkTokenConfig(String token) { + return getOrganIdByAppToken(token.substring(FIELD_IMES.length())); + } - TokenConfigDO tokenConfigDO = tokenConfigMapper.selectByToken(token.substring(5)); + @Override + public Long getOrganIdByAppToken(String appToken) { + // 应用 Token 必须存在且处于有效期内,避免失效配置继续访问外部接口。 + TokenConfigDO tokenConfigDO = tokenConfigMapper.selectByToken(appToken); if(tokenConfigDO == null){ throw new ServiceException(TOKEN_CONFIG_NOT_EXISTS); @@ -219,7 +224,7 @@ public class TokenConfigServiceImpl implements TokenConfigService{ } Long organId = tokenConfigDO.getOrganId(); - + // 同步校验组织状态和有效期,保证返回的组织编号当前可用。 OrganizationDO organizationDO = organMapper.selectById(organId); if (organizationDO == null) { @@ -326,4 +331,4 @@ public class TokenConfigServiceImpl implements TokenConfigService{ -} \ No newline at end of file +} diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml index 29887192c..c42dacece 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml @@ -187,6 +187,7 @@ chenfeng: - /admin-api/system/user/reset-password - /admin-api/system/auth/login/check - /admin-api/system/auth/login/sms/check + - /admin-api/system/auth/app-token/organ-id - /admin-api/system/token/check - /rpc-api/** - /admin-api/system/pay/** @@ -360,4 +361,4 @@ aj: mybatis-plus: configuration: - log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl \ No newline at end of file + log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml index a7f801f9d..c359ac0cf 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml @@ -202,6 +202,7 @@ chenfeng: - /admin-api/system/user/reset-password - /admin-api/system/auth/login/check - /admin-api/system/auth/login/sms/check + - /admin-api/system/auth/app-token/organ-id - /admin-api/system/token/check - /rpc-api/** - /admin-api/system/pay/** diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_cht.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_cht.properties index b4ce1320d..f91e832f1 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_cht.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_cht.properties @@ -108,4 +108,6 @@ assembly.config.import.orderIds.size=訂單號清單長度不能超過100 assembly.config.save.id.notNull=裝備設定編號不能為空 assembly.config.save.structure.config.notNull=裝備設定結構配寘不能為空 -common.status.invalid=狀態不合法 \ No newline at end of file +common.status.invalid=狀態不合法 +auth.appToken.notBlank=應用 Token 不能為空 +auth.appToken.size=應用 Token 長度不能超過 255 個字元 diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_en.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_en.properties index 83ee555ad..8f9c35d1c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_en.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_en.properties @@ -108,4 +108,6 @@ assembly.config.import.orderIds.size=The length of the production order number l assembly.config.save.id.notNull=Assembly setting number cannot be empty assembly.config.save.structure.config.notNull=Assembly setting structure configuration cannot be empty -common.status.invalid=The status is illegal \ No newline at end of file +common.status.invalid=The status is illegal +auth.appToken.notBlank=Application Token cannot be blank +auth.appToken.size=Application Token cannot exceed 255 characters diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_zh.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_zh.properties index 206aaa84b..feceaa1cf 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_zh.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_zh.properties @@ -108,4 +108,6 @@ assembly.config.import.orderIds.size=订单号列表长度不能超过100 assembly.config.save.id.notNull=装备设置编号不能为空 assembly.config.save.structure.config.notNull=装备设置结构配置不能为空 -common.status.invalid=状态不合法 \ No newline at end of file +common.status.invalid=状态不合法 +auth.appToken.notBlank=应用 Token 不能为空 +auth.appToken.size=应用 Token 长度不能超过 255 个字符 diff --git a/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/controller/admin/auth/AuthControllerTest.java b/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/controller/admin/auth/AuthControllerTest.java index ad4baa8aa..47504126f 100644 --- a/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/controller/admin/auth/AuthControllerTest.java +++ b/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/controller/admin/auth/AuthControllerTest.java @@ -28,6 +28,7 @@ import com.cf.imes.module.system.service.permission.MenuService; import com.cf.imes.module.system.service.permission.PermissionService; import com.cf.imes.module.system.service.permission.RoleService; import com.cf.imes.module.system.service.sms.SmsCodeService; +import com.cf.imes.module.system.service.tokenconfig.TokenConfigService; import com.cf.imes.module.system.service.user.AdminUserService; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; @@ -115,6 +116,9 @@ class AuthControllerTest extends BaseWebUnitTest { @MockitoBean private ApiErrorLogApi apiErrorLogApi; + @MockitoBean + private TokenConfigService tokenConfigService; + @Autowired private ObjectMapper objectMapper; @@ -202,6 +206,19 @@ class AuthControllerTest extends BaseWebUnitTest { verify(authService, times(1)).loginSmsCheck(smsCheckReq); } + @Test + void testGetOrganIdByAppToken() throws Exception { + when(tokenConfigService.getOrganIdByAppToken("test-app-token")).thenReturn(100L); + + mockMvc.perform(post("/admin-api/system/auth/app-token/organ-id") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"appToken\":\"test-app-token\"}")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.data").value(100L)); + + verify(tokenConfigService, times(1)).getOrganIdByAppToken("test-app-token"); + } + @Test void testLogout_withToken() throws Exception { // mock token header/parameter