From e6169bdb6c2d6c41986e81e2df12ceaf472aaf7d Mon Sep 17 00:00:00 2001 From: Charles7c Date: Sun, 27 Jul 2025 09:36:29 +0800 Subject: [PATCH] build: continew-starter 2.13.3 => 2.13.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.移除 continew-starter-security-password 模块依赖及相关配置(已融合到 security-crypto 模块) 2.更新 continew-starter-security-crypto 模块配置 3.BaseController 增加跳过 DICT、DICT_TREE 接口权限处理 4.EnableCrudRestController => EnableCrudApi 5.调整 CRUD 相关 Controller API 接口配置,增加 DICT 或 DICT_TREE 接口,移除原 CommonController 接口 --- README.md | 10 +-- continew-common/pom.xml | 6 -- .../base/controller/BaseController.java | 4 ++ .../doc/OperationDescriptionCustomizer.java | 17 +++-- .../templates/backend/Controller.ftl | 2 +- .../main/resources/templates/frontend/api.ftl | 6 ++ .../resources/templates/frontend/index.ftl | 4 +- .../tenant/controller/CommonController.java | 14 ---- .../tenant/controller/PackageController.java | 2 +- .../admin/ContiNewAdminApplication.java | 6 +- .../main/resources/config/application-dev.yml | 24 ++++--- .../resources/config/application-prod.yml | 24 ++++--- .../src/main/resources/config/application.yml | 64 ++++++++----------- .../admin/system/api/DictApiImpl.java | 2 +- .../system/controller/CommonController.java | 32 +--------- .../system/controller/DeptController.java | 2 +- .../system/controller/MenuController.java | 2 +- .../system/controller/RoleController.java | 2 +- .../system/controller/UserController.java | 2 +- .../system/service/impl/RoleServiceImpl.java | 4 +- pom.xml | 2 +- 21 files changed, 97 insertions(+), 134 deletions(-) diff --git a/README.md b/README.md index 139b01a5..93c9fd7d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Release -ContiNew Starter +ContiNew Starter Spring Boot @@ -88,12 +88,12 @@ ContiNew Admin(Continue New Admin),页面现代美观,且专注设计与 2.**Starter 组件:** 从 v2.1.0 版本开始,抽取并封装后端基础组件及各框架集成配置到 ContiNew Starter 项目,且 **[已发布至 Maven 中央仓库](https://central.sonatype.com/search?q=continew-starter&namespace=top.continew)**,可在你的任意项目中直接引入所需依赖使用。即使你不用脚手架项目,难道能让你搭项目框架更快、更爽、更省力的 Starter 也要 Say No 吗? -3.**CRUD 套件:** 封装通用增删改查套件,适配后端各分层,几分钟即可提供一套 CRUD API,包括新增、修改、批量删除、查询详情、分页列表查询、全部列表查询、树型列表查询、导出到 Excel,且 API 支持按实际所需开放或扩展。 +3.**CRUD 套件:** 封装通用增删改查套件,适配后端各分层,几分钟即可提供一套 CRUD API,包括新增、修改、批量删除、查询详情、分页列表查询、全部列表查询、树型列表查询、导出到 Excel,甚至是字典列表(用于下拉选项场景),且 API 支持按实际所需开放或扩展。 ```java @Tag(name = "部门管理 API") @RestController -@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.DELETE, Api.EXPORT}) +@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.DELETE, Api.EXPORT, Api.DICT_TREE}) public class DeptController extends BaseController {} ``` @@ -231,7 +231,7 @@ public class DeptController extends BaseControllerArco Design | 2.57.0 | 字节跳动推出的前端 UI 框架,年轻化的色彩和组件设计。 | | TypeScript | 5.0.4 | TypeScript 是微软开发的一个开源的编程语言,通过在 JavaScript 的基础上添加静态类型定义构建而成。 | | Vite | 5.1.5 | 下一代的前端工具链,为开发提供极速响应。 | -| [ContiNew Starter](https://github.com/continew-org/continew-starter) | 2.13.3 | ContiNew Starter 包含了一系列经过企业实践优化的依赖包(如 MyBatis-Plus、SaToken),可轻松集成到应用中,为开发人员减少手动引入依赖及配置的麻烦,为 Spring Boot Web 项目的灵活快速构建提供支持。 | +| [ContiNew Starter](https://github.com/continew-org/continew-starter) | 2.13.4 | ContiNew Starter 包含了一系列经过企业实践优化的依赖包(如 MyBatis-Plus、SaToken),可轻松集成到应用中,为开发人员减少手动引入依赖及配置的麻烦,为 Spring Boot Web 项目的灵活快速构建提供支持。 | | Spring Boot | 3.3.12 | 简化 Spring 应用的初始搭建和开发过程,基于“约定优于配置”的理念,使开发人员不再需要定义样板化的配置。(Spring Boot 3.0 开始,要求 Java 17 作为最低版本) | | Undertow | 2.3.18.Final | 采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。 | | Sa-Token + JWT | 1.44.0 | 轻量级 Java 权限认证框架,让鉴权变得简单、优雅。 | @@ -253,7 +253,7 @@ public class DeptController extends BaseControllerKnife4j | 4.5.0 | 前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案。 | diff --git a/continew-common/pom.xml b/continew-common/pom.xml index a7503434..695d6cc0 100644 --- a/continew-common/pom.xml +++ b/continew-common/pom.xml @@ -102,12 +102,6 @@ continew-starter-auth-justauth - - - top.continew.starter - continew-starter-security-password - - top.continew.starter diff --git a/continew-common/src/main/java/top/continew/admin/common/base/controller/BaseController.java b/continew-common/src/main/java/top/continew/admin/common/base/controller/BaseController.java index f9caf1cc..0567f433 100644 --- a/continew-common/src/main/java/top/continew/admin/common/base/controller/BaseController.java +++ b/continew-common/src/main/java/top/continew/admin/common/base/controller/BaseController.java @@ -73,6 +73,10 @@ public class BaseController, L, D, Q, C> exten return; } } + // 不需要校验 DICT、DICT_TREE 接口权限 + if (Api.DICT.equals(crudApi.value()) || Api.DICT_TREE.equals(crudApi.value())) { + return; + } // 校验权限,例如:创建用户接口(POST /system/user) => 校验 system:user:create 权限 String permissionPrefix = CrudApiPermissionPrefixCache.get(targetClass); String apiName = getApiName(crudApi.value()); diff --git a/continew-common/src/main/java/top/continew/admin/common/config/doc/OperationDescriptionCustomizer.java b/continew-common/src/main/java/top/continew/admin/common/config/doc/OperationDescriptionCustomizer.java index b2b49b8d..0c20b90d 100644 --- a/continew-common/src/main/java/top/continew/admin/common/config/doc/OperationDescriptionCustomizer.java +++ b/continew-common/src/main/java/top/continew/admin/common/config/doc/OperationDescriptionCustomizer.java @@ -19,14 +19,16 @@ package top.continew.admin.common.config.doc; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckRole; import cn.dev33.satoken.annotation.SaMode; -import cn.hutool.core.text.CharSequenceUtil; import org.springframework.web.method.HandlerMethod; import top.continew.admin.common.base.controller.BaseController; +import top.continew.admin.common.config.crud.CrudApiPermissionPrefixCache; import top.continew.starter.core.constant.StringConstants; import top.continew.starter.extension.crud.annotation.CrudApi; import top.continew.starter.extension.crud.annotation.CrudRequestMapping; +import top.continew.starter.extension.crud.enums.Api; import java.lang.annotation.Annotation; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @@ -160,18 +162,21 @@ public class OperationDescriptionCustomizer { * * @param handlerMethod 处理程序方法 * @return 拼接好的权限信息字符串 + * @see BaseController#preHandle(CrudApi, Object[], Method, Class) */ private String getCrudPermissionInfo(HandlerMethod handlerMethod) { - CrudRequestMapping crudRequestMapping = handlerMethod.getBeanType().getAnnotation(CrudRequestMapping.class); + Class targetClass = handlerMethod.getBeanType(); + CrudRequestMapping crudRequestMapping = targetClass.getAnnotation(CrudRequestMapping.class); CrudApi crudApi = handlerMethod.getMethodAnnotation(CrudApi.class); if (crudRequestMapping == null || crudApi == null) { return StringConstants.EMPTY; } - - String path = crudRequestMapping.value(); - String prefix = String.join(StringConstants.COLON, CharSequenceUtil.splitTrim(path, StringConstants.SLASH)); + if (Api.DICT.equals(crudApi.value()) || Api.DICT_TREE.equals(crudApi.value())) { + return StringConstants.EMPTY; + } + String permissionPrefix = CrudApiPermissionPrefixCache.get(targetClass); String apiName = BaseController.getApiName(crudApi.value()); - String permission = "%s:%s".formatted(prefix, apiName.toLowerCase()); + String permission = "%s:%s".formatted(permissionPrefix, apiName.toLowerCase()); return "CRUD 权限校验:
方法:" + permission + ""; } } diff --git a/continew-plugin/continew-plugin-generator/src/main/resources/templates/backend/Controller.ftl b/continew-plugin/continew-plugin-generator/src/main/resources/templates/backend/Controller.ftl index 3945363a..d8e3eda8 100644 --- a/continew-plugin/continew-plugin-generator/src/main/resources/templates/backend/Controller.ftl +++ b/continew-plugin/continew-plugin-generator/src/main/resources/templates/backend/Controller.ftl @@ -22,5 +22,5 @@ import ${packageName}.service.${classNamePrefix}Service; */ @Tag(name = "${businessName}管理 API") @RestController -@CrudRequestMapping(value = "/${apiModuleName}/${apiName}", api = {Api.PAGE, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE, Api.EXPORT}) +@CrudRequestMapping(value = "/${apiModuleName}/${apiName}", api = {Api.PAGE, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE, Api.EXPORT, Api.DICT}) public class ${className} extends BaseController<${classNamePrefix}Service, ${classNamePrefix}Resp, ${classNamePrefix}DetailResp, ${classNamePrefix}Query, ${classNamePrefix}Req> {} \ No newline at end of file diff --git a/continew-plugin/continew-plugin-generator/src/main/resources/templates/frontend/api.ftl b/continew-plugin/continew-plugin-generator/src/main/resources/templates/frontend/api.ftl index de39b017..5eb2e734 100644 --- a/continew-plugin/continew-plugin-generator/src/main/resources/templates/frontend/api.ftl +++ b/continew-plugin/continew-plugin-generator/src/main/resources/templates/frontend/api.ftl @@ -1,4 +1,5 @@ import http from '@/utils/http' +import type { LabelValueState } from '@/types/global' const BASE_URL = '/${apiModuleName}/${apiName}' @@ -64,3 +65,8 @@ export function delete${classNamePrefix}(id: string) { export function export${classNamePrefix}(query: ${classNamePrefix}Query) { return http.download(`${'$'}{BASE_URL}/export`, query) } + +/** @desc 查询${businessName}字典 */ +export function list${classNamePrefix}Dict(query?: ${classNamePrefix}Query) { +return http.get(`${BASE_URL}/dict`, query) +} diff --git a/continew-plugin/continew-plugin-generator/src/main/resources/templates/frontend/index.ftl b/continew-plugin/continew-plugin-generator/src/main/resources/templates/frontend/index.ftl index 54fa6e27..182e7085 100644 --- a/continew-plugin/continew-plugin-generator/src/main/resources/templates/frontend/index.ftl +++ b/continew-plugin/continew-plugin-generator/src/main/resources/templates/frontend/index.ftl @@ -1,5 +1,5 @@