diff --git a/README.md b/README.md index fda8af149a949d8b0b3b67354fef3a2fbf4a5e59..f21499b420cdda8adab217c40815f278ecb2b815 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # acp-admin-cloud -###### v7.0.1 [版本更新日志](doc/version_history.md) +###### v7.0.2 [版本更新日志](doc/version_history.md) - 使用Application Construction Platform 应用构建平台作为脚手架 - 基于 Spring Cloud 的微服务版本,基于 Spring Boot @@ -11,7 +11,7 @@ - [Spring Boot 3.5.4](https://projects.spring.io/spring-boot) - [Spring Boot Admin 3.5.2](https://github.com/codecentric/spring-boot-admin) -- [Acp 2025.7.2](https://gitee.com/zhangbinhub/acp) +- [Acp 2025.8.0](https://gitee.com/zhangbinhub/acp) - [sensitive](https://github.com/houbb/sensitive) ## 技术栈 diff --git a/common/acp-admin-cloud-dependencies-resource-server/src/main/kotlin/io/gitee/zhangbinhub/admin/resource/server/feign/CommonOauthServer.kt b/common/acp-admin-cloud-dependencies-resource-server/src/main/kotlin/io/gitee/zhangbinhub/admin/resource/server/feign/CommonOauthServer.kt index 622ee6412413c098aebcf5d0342740ed71270f3b..99305682d0a4e96fc297ba9a5a2be673d5d674f9 100644 --- a/common/acp-admin-cloud-dependencies-resource-server/src/main/kotlin/io/gitee/zhangbinhub/admin/resource/server/feign/CommonOauthServer.kt +++ b/common/acp-admin-cloud-dependencies-resource-server/src/main/kotlin/io/gitee/zhangbinhub/admin/resource/server/feign/CommonOauthServer.kt @@ -2,7 +2,6 @@ package io.gitee.zhangbinhub.admin.resource.server.feign import io.gitee.zhangbinhub.admin.common.api.CommonPath import io.gitee.zhangbinhub.admin.common.api.OauthApi -import io.gitee.zhangbinhub.admin.common.vo.BooleanInfoVo import io.gitee.zhangbinhub.admin.common.vo.InnerInfoVo import io.gitee.zhangbinhub.admin.resource.server.hystrix.CommonOauthServerHystrix import io.gitee.zhangbinhub.admin.resource.server.vo.* @@ -25,18 +24,6 @@ interface CommonOauthServer { @GetMapping(value = [CommonPath.innerBasePath + OauthApi.appInfo], produces = [MediaType.APPLICATION_JSON_VALUE]) fun appInfo(@RequestParam(name = "access_token") token: String): ApplicationVo - /** - * 指定用户是否具有指定的功能权限 - */ - @GetMapping( - value = [CommonPath.openInnerBasePath + OauthApi.moduleFunc + "/{userId}/{moduleFuncCode}"], - produces = [MediaType.APPLICATION_JSON_VALUE] - ) - fun hasModuleFunc( - @PathVariable(name = "userId") userId: String, - @PathVariable(name = "moduleFuncCode") moduleFuncCode: String - ): BooleanInfoVo - /** * 获取所属机构及其所有子机构列表(所属机构) */ diff --git a/common/acp-admin-cloud-dependencies-resource-server/src/main/kotlin/io/gitee/zhangbinhub/admin/resource/server/hystrix/CommonOauthServerHystrix.kt b/common/acp-admin-cloud-dependencies-resource-server/src/main/kotlin/io/gitee/zhangbinhub/admin/resource/server/hystrix/CommonOauthServerHystrix.kt index 5165bc482377fad0fcae85092042f3d21bf9e80f..bd553c89eeaecc4c5aef7fe5bb9c50101bf7e8ea 100644 --- a/common/acp-admin-cloud-dependencies-resource-server/src/main/kotlin/io/gitee/zhangbinhub/admin/resource/server/hystrix/CommonOauthServerHystrix.kt +++ b/common/acp-admin-cloud-dependencies-resource-server/src/main/kotlin/io/gitee/zhangbinhub/admin/resource/server/hystrix/CommonOauthServerHystrix.kt @@ -5,7 +5,6 @@ import feign.FeignException import io.gitee.zhangbinhub.acp.boot.log.LogAdapter import io.gitee.zhangbinhub.acp.boot.vo.ErrorVo import io.gitee.zhangbinhub.admin.common.base.BaseFeignHystrix -import io.gitee.zhangbinhub.admin.common.vo.BooleanInfoVo import io.gitee.zhangbinhub.admin.common.vo.InnerInfoVo import io.gitee.zhangbinhub.admin.resource.server.feign.CommonOauthServer import io.gitee.zhangbinhub.admin.resource.server.vo.* @@ -45,12 +44,6 @@ class CommonOauthServerHystrix(logAdapter: LogAdapter, objectMapper: ObjectMappe return ApplicationVo() } - override fun hasModuleFunc(userId: String, moduleFuncCode: String): BooleanInfoVo { - val errMsg = "找不到对应的功能权限信息" - logAdapter.error(errMsg) - return BooleanInfoVo(result = false) - } - override fun currAndAllChildrenForOrg(): List { val errMsg = "获取机构列表失败" logAdapter.error(errMsg) diff --git a/doc/version_history.md b/doc/version_history.md index 5e3ba5b6a9436f626b02be3897dddd19d5f424fe..4c797120e78ff5579cbb93426c0946589302db41 100644 --- a/doc/version_history.md +++ b/doc/version_history.md @@ -1,5 +1,16 @@ ## 版本更新记录 +##### v7.0.2 + +- Global + - [Upgrade] 升级依赖 + - Acp 2025.8.0 + - [Upgrade] 删除无用代码 +- gateway-server + - [Upgrade] 优化路由日志 +- log-server + - [Upgrade] 优化路由日志 + ##### v7.0.1 - Global diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7bf48b8a39f391c374468335f69e01c01ca7d0ef..d46d03b2141ccec8df450eacd5b6f9461c4dbc5b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ kotlin = "2.1.21" jreleaser = "1.19.0" ######################## dependencies ##################### -acp = "2025.7.2" +acp = "2025.8.0" springBoot = "3.5.4" springBootAdmin = "3.5.2" sensitive = "1.7.0" diff --git a/gradle/moduleVersion.gradle b/gradle/moduleVersion.gradle index d5b52527f0894cbba300d64165bb05e729d31142..99d72c0dba4315ece3cf851b6f1b9eeadb6420b1 100644 --- a/gradle/moduleVersion.gradle +++ b/gradle/moduleVersion.gradle @@ -1,27 +1,27 @@ project(':acp-admin-cloud-constant') { - version '7.0.1' + version '7.0.2' } project(':acp-admin-cloud-dependencies') { - version '7.0.1' + version '7.0.2' } project(':acp-admin-cloud-dependencies-resource-server') { - version '7.0.1' + version '7.0.2' } project(':admin-server') { - version '7.0.1' + version '7.0.2' } project(':deploy-server') { - version '7.0.1' + version '7.0.2' } project(':gateway-server') { - version '7.0.1' + version '7.0.2' } project(':log-server') { - version '7.0.1' + version '7.0.2' } project(':oauth-server') { - version '7.0.1' + version '7.0.2' } project(':workflow-server') { - version '7.0.1' + version '7.0.2' } \ No newline at end of file diff --git a/modules/gateway-server/src/main/kotlin/io/gitee/zhangbinhub/admin/gateway/conf/RouteConfiguration.kt b/modules/gateway-server/src/main/kotlin/io/gitee/zhangbinhub/admin/gateway/conf/RouteConfiguration.kt index cd427dfd091c101ccbd09b016aed9a8adebb60ae..00a4f0e0f60dc8975dcf593e7897493efe05bbb4 100644 --- a/modules/gateway-server/src/main/kotlin/io/gitee/zhangbinhub/admin/gateway/conf/RouteConfiguration.kt +++ b/modules/gateway-server/src/main/kotlin/io/gitee/zhangbinhub/admin/gateway/conf/RouteConfiguration.kt @@ -53,13 +53,6 @@ class RouteConfiguration @Autowired constructor(private val routeLogService: Rou } } - @Bean - fun logRequestFilter(routeLogBridge: RouteLogBridge): GlobalFilter = GlobalFilter { exchange, chain -> - chain!!.filter(exchange.also { - routeLogBridge.sendMessage(routeLogService.createRouteLogMessage(it)) - }) - } - @Bean fun logResponseFilter(routeLogBridge: RouteLogBridge): GlobalFilter = object : GlobalFilter, Ordered { override fun filter(exchange: ServerWebExchange?, chain: GatewayFilterChain?): Mono { diff --git a/modules/gateway-server/src/main/kotlin/io/gitee/zhangbinhub/admin/gateway/log/RouteLogService.kt b/modules/gateway-server/src/main/kotlin/io/gitee/zhangbinhub/admin/gateway/log/RouteLogService.kt index 89979ebd4c167c7fecd833e87e5ed0baba7d92bd..e016c02eabc2a3bcbbd1067aaee9b5a0a8d74aaa 100644 --- a/modules/gateway-server/src/main/kotlin/io/gitee/zhangbinhub/admin/gateway/log/RouteLogService.kt +++ b/modules/gateway-server/src/main/kotlin/io/gitee/zhangbinhub/admin/gateway/log/RouteLogService.kt @@ -1,7 +1,6 @@ package io.gitee.zhangbinhub.admin.gateway.log import com.fasterxml.jackson.databind.ObjectMapper -import io.gitee.zhangbinhub.acp.boot.constant.AcpCoreConstant import io.gitee.zhangbinhub.acp.boot.log.LogAdapter import io.gitee.zhangbinhub.acp.boot.tools.IpTools import io.gitee.zhangbinhub.acp.cloud.constant.AcpCloudConstant @@ -75,8 +74,8 @@ constructor( token = authList[1] } } - token?.apply { - serverWebExchange.request.queryParams["access_token"]?.let { + if (token == null) { + serverWebExchange.request.queryParams[GateWayConstant.GATEWAY_HEADER_RESPONSE_TOKEN_FIELD]?.let { if (it.isNotEmpty()) { token = it[0] } @@ -107,7 +106,7 @@ constructor( tmpUri = tmpUri.substring(8) } if (tmpUri.contains("/")) { - routeLogMessage.path = tmpUri.substring(tmpUri.indexOf("/")) + routeLogMessage.path = tmpUri.substringAfter("/") } else { routeLogMessage.path = tmpUri } @@ -115,7 +114,7 @@ constructor( if (routeLogMessage.serverId == null && uriStr.startsWith(prefix)) { val tmpUri = uriStr.substring(prefix.length) if (tmpUri.contains("/")) { - routeLogMessage.serverId = tmpUri.substring(0, tmpUri.indexOf("/")) + routeLogMessage.serverId = tmpUri.substringBefore("/") } else { routeLogMessage.serverId = tmpUri } diff --git a/modules/log-server/src/main/kotlin/io/gitee/zhangbinhub/admin/log/service/LogService.kt b/modules/log-server/src/main/kotlin/io/gitee/zhangbinhub/admin/log/service/LogService.kt index 58c91a46b80b2bac0359b2a3f0fe807bd8518757..36b185a8a2e3dac5d777949d1a9e06fbd66d6e68 100644 --- a/modules/log-server/src/main/kotlin/io/gitee/zhangbinhub/admin/log/service/LogService.kt +++ b/modules/log-server/src/main/kotlin/io/gitee/zhangbinhub/admin/log/service/LogService.kt @@ -9,7 +9,6 @@ import io.gitee.zhangbinhub.admin.common.vo.CustomerQueryPageVo import io.gitee.zhangbinhub.admin.log.base.BaseLogEntity import io.gitee.zhangbinhub.admin.log.base.BaseRepository import io.gitee.zhangbinhub.admin.log.base.BaseService -import io.gitee.zhangbinhub.admin.log.constant.LogConstant import io.gitee.zhangbinhub.admin.log.entity.LoginLog import io.gitee.zhangbinhub.admin.log.entity.OperateLog import io.gitee.zhangbinhub.admin.log.entity.RouteLog @@ -21,8 +20,6 @@ import io.gitee.zhangbinhub.admin.resource.server.tools.TokenUserTools import io.gitee.zhangbinhub.admin.resource.server.vo.ApplicationVo import io.gitee.zhangbinhub.admin.resource.server.vo.TokenUserInfoVo import jakarta.persistence.criteria.Predicate -import kotlinx.coroutines.delay -import kotlinx.coroutines.runBlocking import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional @@ -79,34 +76,7 @@ constructor( logAdapter.error(e.message, e) } } - if (routeLog.responseStatus != null) {// 响应日志 - var optionalRouteLog = routeLogRepository.findByLogIdAndRequestTime(routeLog.logId, routeLog.requestTime) - var count = 1 - while (optionalRouteLog.isEmpty) { - runBlocking { - delay(LogConstant.ROUTE_LOG_QUERY_INTERVAL_TIME) - } - optionalRouteLog = routeLogRepository.findByLogIdAndRequestTime(routeLog.logId, routeLog.requestTime) - if (++count >= LogConstant.ROUTE_LOG_QUERY_MAX_NUMBER) { - break - } - } - optionalRouteLog.ifPresent { - it.token = routeLog.token - it.clientId = routeLog.clientId - it.clientName = routeLog.clientName - it.identify = routeLog.identify - it.userId = routeLog.userId - it.loginNo = routeLog.loginNo - it.userName = routeLog.userName - it.processTime = routeLog.processTime - it.responseTime = routeLog.responseTime - it.responseStatus = routeLog.responseStatus - routeLogRepository.save(it) - } - } else {// 请求日志 - routeLogRepository.save(routeLog) - } + routeLogRepository.save(routeLog) } @Transactional diff --git a/modules/log-server/src/main/resources/logback-spring.xml b/modules/log-server/src/main/resources/logback-spring.xml index 024364880cd08ae2585697464fbaafec7bbc3188..31802bfb743002b4bb36efbb383e04734584b74b 100644 --- a/modules/log-server/src/main/resources/logback-spring.xml +++ b/modules/log-server/src/main/resources/logback-spring.xml @@ -134,37 +134,6 @@ - - - ${logPatternFileServer} - UTF8 - - - ${LOG_HOME}/${APP_NAME}/%d{yyyy-MM-dd}/ROUTE.%i.log - - 100MB - 180 - - - ALL - - - - - ${logPatternFileServer} - UTF8 - - - ${LOG_HOME}/${APP_NAME}/%d{yyyy-MM-dd}/ROUTE.error.%i.log - - 100MB - 180 - - - ERROR - - - ${logPatternFileServer} @@ -212,13 +181,8 @@ - - - - - \ No newline at end of file diff --git a/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/controller/openinner/OpenInnerTokenController.kt b/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/controller/openinner/OpenInnerTokenController.kt deleted file mode 100644 index 29e25348c2cd5d582d16aec0aef6013b363cc9d9..0000000000000000000000000000000000000000 --- a/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/controller/openinner/OpenInnerTokenController.kt +++ /dev/null @@ -1,41 +0,0 @@ -package io.gitee.zhangbinhub.admin.oauth.controller.openinner - -import io.gitee.zhangbinhub.acp.boot.exceptions.WebException -import io.gitee.zhangbinhub.acp.boot.log.LogAdapter -import io.gitee.zhangbinhub.admin.common.api.CommonPath -import io.gitee.zhangbinhub.admin.common.api.OauthApi -import io.gitee.zhangbinhub.admin.common.vo.BooleanInfoVo -import io.gitee.zhangbinhub.admin.oauth.service.ModuleFuncService -import io.gitee.zhangbinhub.admin.resource.server.base.BaseResourceServerController -import io.swagger.v3.oas.annotations.Operation -import io.swagger.v3.oas.annotations.tags.Tag -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.http.MediaType -import org.springframework.http.ResponseEntity -import org.springframework.validation.annotation.Validated -import org.springframework.web.bind.annotation.* - -/** - * @since JDK 11 - */ -@Validated -@RestController -@RequestMapping(CommonPath.openInnerBasePath) -@Tag(name = "认证信息(内部开放接口)") -class OpenInnerTokenController @Autowired -constructor( - logAdapter: LogAdapter, - private val moduleFuncService: ModuleFuncService -) : BaseResourceServerController(logAdapter) { - @Operation(summary = "判断指定用户是否具有指定的权限") - @GetMapping( - value = [OauthApi.moduleFunc + "/{userId}/{moduleFuncCode}"], - produces = [MediaType.APPLICATION_JSON_VALUE] - ) - @Throws(WebException::class) - fun userHasModuleFunc( - @PathVariable(name = "userId") userId: String, - @PathVariable(name = "moduleFuncCode") moduleFuncCode: String - ): ResponseEntity = - ResponseEntity.ok(BooleanInfoVo(result = moduleFuncService.hasModuleFunc(userId, moduleFuncCode))) -} diff --git a/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/vo/MenuVo.kt b/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/vo/MenuVo.kt index 69d11e5afa7dafac2b892f52078f425d49a441a8..eaf9a73950ac4a5b35d61eb81251c438a6596cf2 100644 --- a/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/vo/MenuVo.kt +++ b/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/vo/MenuVo.kt @@ -1,9 +1,6 @@ package io.gitee.zhangbinhub.admin.oauth.vo import io.swagger.v3.oas.annotations.media.Schema -import jakarta.validation.constraints.Max -import jakarta.validation.constraints.Min -import jakarta.validation.constraints.NotBlank /** * @since JDK 11 @@ -18,27 +15,21 @@ data class MenuVo( var appId: String? = null, @Schema(description = "菜单名称") - @NotBlank(message = "菜单名称不能为空") var name: String? = null, @Schema(description = "菜单图标") - @NotBlank(message = "菜单图标不能为空") var iconType: String? = null, @Schema(description = "链接路径") - @NotBlank(message = "链接路径不能为空") var path: String? = null, @Schema(description = "上级菜单ID") - @NotBlank(message = "上级菜单ID不能为空") var parentId: String? = null, @Schema(description = "菜单是否启用") var enabled: Boolean = true, @Schema(description = "链接打开模式;0-内嵌,1-新标签页") - @Min(value = 0, message = "打开模式只能为 0 或 1") - @Max(value = 1, message = "打开模式只能为 0 或 1") var openType: Int = 0, @Schema(description = "序号") @@ -46,5 +37,4 @@ data class MenuVo( @Schema(description = "关联角色ID") var roleIds: MutableList = mutableListOf() - ) diff --git a/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/vo/ModuleFuncVo.kt b/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/vo/ModuleFuncVo.kt index b5c3f028d39c77ea455c0803615d960dbbae7505..443e0c2d85ed4fedd6e3df088cf2f9fb0008d188 100644 --- a/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/vo/ModuleFuncVo.kt +++ b/modules/oauth-server/src/main/kotlin/io/gitee/zhangbinhub/admin/oauth/vo/ModuleFuncVo.kt @@ -1,7 +1,6 @@ package io.gitee.zhangbinhub.admin.oauth.vo import io.swagger.v3.oas.annotations.media.Schema -import jakarta.validation.constraints.NotBlank /** * @since JDK 11 @@ -16,15 +15,12 @@ data class ModuleFuncVo( var appId: String? = null, @Schema(description = "模块名称") - @NotBlank(message = "模块名称不能为空") var name: String? = null, @Schema(description = "模块编码") - @NotBlank(message = "模块编码不能为空") var code: String? = null, @Schema(description = "上级ID") - @NotBlank(message = "上级ID不能为空") var parentId: String? = null, @Schema(description = "关联角色ID")