Skip to content

开箱即用

矩阵星云创世之柱的开箱即用包括两个大的方面:

  • 集成了完整的权限模块,包括用户管理,角色管理,菜单管理模块以及登录认证相关能力
  • 实现了底层框架基础功能, 包括审计日志切面,低代码,定时器,国际化等,

开发者无需关注底层实现即可直接使用这些能力,可以更专注于业务开发。

权限模块

权限模块的可视化部分如下图所示: permission.png

用户管理

用户管理将用户与用户组功能集成在了一起,系统默认一个管理员组以及管理员组下的四个系统管理员账号。 如下图所示: user-manager.png

  • 管理员组以及系统管理员账号均不可删除,管理员账号的操作仅限于解锁,重置密码以及修改密码
  • 超级管理员(super)具有全部权限, 其他几个管理员属于三员角色有各自的权限范围
  • 用户组除了管理员组不可变更之外,其他可以自定义,包括新增,编辑,删除
  • 普通用户除了具备管理员账号的功能之外,可以新增,编辑,删除,锁定与换组

角色管理

角色管理默认预置了与系统管理员对应的四个角色, 如下图所示, 每个角色的权限范围都有对应的描述。 role-manager.png

如果现有角色不能满足需要,可以新增新的角色,新角色的权限设定较为灵活, 如下图所示: new-role.png

TIP

上图可见,定义的新角色可不局限于任何系统角色的约束

菜单管理

菜单管理具备所见即所得的能力, 无论是全量代码的功能模块还是低代码生成的功能模块均在菜单管理中进行定义. 如下图所示: menu-manager.png

  • 所谓所见即所得是指在左侧菜单组里可以鼠标拖放重排, 重排后刷新界面, 系统菜单即可显示重排后的顺序。
  • 菜单的属性值均按照Vue3规定的路由参数进行填写, 对于全量代码开发的菜单设定指向正确的路径位置即可, 如果是低代码菜单直接关联数据即可。有关详细使用说明可参见示例部分

系统模块

系统模块实现了一个Tab分页的可分隔扩展的配置模块, 每个分隔配置都是一个独立的配置页, 实现了页面高内聚,代码低耦合机制。页面视图与代码视图如下: sys-view.png

sys-code.png

INFO

本项目仅实现了令牌设置与访问控制, 其他设置只是样例, 没有实现任何功能, 它只是为了体现功能和代码的完整性, 方便具体应用的扩展开发。

令牌设置

令牌设置可以自定义会话过期时间等参数, 如下图所示: token-config.png

参数说明:

  • 过期时间: 登录后令牌过期时间
  • 续期阈值: 接近令牌过期的倒计时时间, 比如令牌过期时间为30分钟, 设定为5时表示倒计时5分钟开始。当操作在此5分钟之内发生一次则重置令牌过期时间为30分钟
  • 自动续期: 关闭此开关则只有在续期阈值内发生操作行为时会触发令牌续期, 否则令牌超时需重新登录; 开启此开关则无论任何情况下都会无限续期永不过期

操作说明:

  • 保存配置: 将当前设置参数保存到数据库并立即生效
  • 手动续期: 将令牌重新设定为过期最长时间, 比如如果过期时间设定为30分钟, 当前还剩余15分钟, 这手动续期后令牌被重置为30分钟后过期
  • 检查状态: 显示区状态更新显示, 比如更新令牌剩余时间

访问控制

访问控制实现了针对IP访问的约束,包括黑白名单与访问频率限制, 如下所示: access-control.png

  • 黑名单: 输入IP地址, 添加到黑名单后此IP将无法访问系统
  • 白名单: 输入IP地址, 添加到白名单后此IP将不受黑名单限制
  • 频率限制: 输入IP地址与访问次数, 比如设定为10次/分钟, 则此IP一分钟内最多只能访问系统10次

通过访问控制规则定义可以极大提高系统的安全性。


内核能力

所谓内核能力是指存在于系统架构模块的非可视化的底层支持功能, 基于这些内核能力可以更专注于业务逻辑的开发。

Bean工具类

除了依赖注入方式之外, 还可以通过Bean工具类, 获取任意的服务Bean, 持久化Bean。以UserService服务bean为例:

示例:获取服务Bean

java
// 导入工具类
import com.matrix.framework.core.common.global.SpringUtil;

// 获取bean实例
UserService userService = SpringUtil.getBean(UserService.class);

// 或者
UserService userService = (UserService) SpringUtil.getBean("userService");

令牌工具类

通过令牌工具类可以在控制器层获取到登录账号的相关信息

示例:获取当前用户信息

java
// 导入工具类
com.matrix.framework.core.component.Jwt


@GetMapping("/me")
public Mono<UserPo> getCurrentUser(ServerWebExchange exchange) {
    // 以下根据需要选择调用方式
    UserPo user1 = Jwt.getLoginUserById(exchange);
    UserPo user2 = Jwt.getLoginUserByName(exchange);
    String userName = Jwt.getLoginUserName(exchange);
    long userId = Jwt.getLoginUserId(exchange);
    ......
}

说明:通过JWT工具类获取当前登录用户。


审计日志

在控制器层通过LogCollector注解自动生成审计日志

示例:自动记录操作日志

java
// 在Controller方法上添加@LogCollector注解即可自动记录日志
@LogCollector(detail = "新增用户")
@PostMapping("/user")
public Mono<Result<UserVo>> addUser(@RequestBody UserVo userVo) {
    return userService.save(userVo).map(Result::ok);
}

说明:

  • 通过AOP切面自动采集操作日志,无需手动埋点
  • 只适合在增删改方法使用, 查询方法不支持

低代码能力 (详见示例部分)

后端校验

为了增强后端安全性, 针对全量代码开发实现了若干基础的后端校验, 包括:

  • IP格式校验
  • Email格式校验
  • Url格式校验
  • 必填项校验
  • 字段长度范围校验

下面演示如何使用Email格式校验, 必填项校验以及字段长度范围校验。

  • 第一步 在控制器方法的参数添加校验注解@Valid
java
public Result<MemberPo> save(@Valid @RequestBody MemberPo member, ServerWebExchange exchange) {
    MemberPo saved = MemberService.save(member);
    return Result.ok(saved).message(I18n.getMessage(MessageConstants.SAVE_SUCCESS));
}
  • 第二步 在参数实体类的属性上添加校验注解
java
public class MemberPo implements Serializable {


    @Required(message = "姓名必填")   // 如果不需要国际化,直接写message即可
    @Length(min = 3, max = 30, message = "姓名长度必须在3-30之间")
    private String name;

    @Email                           // Email, IP, URL格式校验的提示信息已内置了国际化处理,不需要关注国际化 
    @Required                        // Required需要国际化,见第三步
    @Length(min = 5, max = 50)       // Length需要国际化,见第三步 
    private String email;

}
  • 第三步 添加国际化资源

只需要针对Length与Required注解添加国际化资源

memberpo.email.required=邮箱必填
memberpo.email.length=邮箱长度范围为5-50

WARNING

key的命名约束

  • 组成: 类名.属性名.注解名
  • 全部小写

TIP

完整的代码参见: com.matrix.app.mvc.project.member.controller下的MemberController与MemberPo

调度服务监听器

可以通过调度服务监听器来定义调度任务,实现执行定时任务

示例:实现执行定时任务

java
// 导入调度类
import com.matrix.framework.core.schedule

@Service
public class YourService {

    @Autowired
    private ScheduleEngine scheduleEngine;

    public void setupTasks() {
        // 使用Cron表达式(每天凌晨1点执行)
        ScheduleTask task1 = new YourTask();
        Trigger cronTrigger = new CronTrigger("0 0 1 * * ?");
        scheduleEngine.registerTask("dailyTask", task1, cronTrigger);

        // 使用固定间隔(每5分钟执行一次)
        ScheduleTask task2 = new YourTask();
        Trigger fixedTrigger = new FixedRateTrigger(5, ChronoUnit.MINUTES);
        scheduleEngine.registerTask("periodicTask", task2, fixedTrigger);
    }
}

说明:YourTask必须实现ScheduleTask接口


常驻服务监听器

示例:自定义常驻服务

java
// 导入装载器接口
import com.matrix.framework.core.loader.ILoader;

// 实现ILoader接口,系统启动时自动加载
@Component
public class MyResidentService implements ILoader {
    @Override
    public String getServiceName() {
        return "自定义常驻服务";
    }

    @Override
    public Mono<Void> load() {
        // 初始化或常驻任务逻辑
        return Mono.fromRunnable(() -> System.out.println("常驻服务已启动"));
    }
}

说明:

  • 实现ILoader接口并加@Component注解,服务会在系统启动时自动加载。
  • 常驻服务器监听器通常与调度服务监听器同时使用, 一个用于加载,一个用于加载后定时执行任务,从而实现常驻服务。

国际化工具类

示例:获取国际化消息

java
// 获取国际化消息
String msg = I18n.getMessage("user.login.success");

说明:通过I18n工具类,按当前请求语言环境获取对应的国际化消息。


输入校验检查器

目前可以对UI界面的输入实现必填项校验, 字段长度校验, IP格式校验, 邮件格式校验, URL格式校验

示例:参数校验注解与校验器

java
// 定义DTO并使用校验注解
public class UserVo {

    @NotNull(message = "用户名不能为空")
    private String username;

    @Email(message = "邮箱格式不正确")
    private String email;
    // ...
}

说明:只需在Vo实体类或Dto类的属性上添加注解即可实现校验。


虚拟线程工具类

实现java21的虚拟线程统一管理,简化调用方式

示例:创建一个虚拟线程

java
// 导入虚拟线程工具类
import com.matrix.framework.core.thread.ThreadEngine

@Service
public class Example {

    private final ThreadEngine threadEngine;

    public Example(ThreadEngine threadEngine) {
        this.threadEngine = threadEngine;
    }

    public void doSomething() {
        // 提交任务到虚拟线程执行
        String threadId = threadEngine.submit("DataProcessor", () -> {
            // 这里是任务逻辑
            //processData();
        });

        // 获取线程状态
        ThreadInfo info = threadEngine.getThreadInfo(threadId);
        System.out.println("Thread status: " + info.getStatus());
    }
}

SSE推送

java
// 通过SseController推送实时消息
@Autowired
private SseController sseController;

public void notifyClients() {
    sseController.notifyClients("news", "有新消息");
}

说明:服务端主动推送消息到前端,实现实时通信。

大文件上传

大文件上传采用分片上传技术,将大文件分割成多个小片段进行上传。本项目提供了一个前后端的完整示例,具体参见示例部分。如下图所示:

bigFileUpload.png

基于Json持久化List增删改查工具

现代编程中越来越多的使用Json格式实现List数据的持久化, 为基于主从数据结构的存储提供了另一种方案。为此本项目实现了一个基于Json持久化list的增删改查工具类,简化操作。具体可参见本项目的示例部分。示例代码位置如下图所示:

jsonList.png

开发支持方式

  • 通过依赖注入、注解、AOP等方式,开发者只需关注业务逻辑,系统自动完成认证、日志、调度、低代码等通用功能。
  • 低代码服务(如GenericService)支持表级事件扩展,开发者可通过实现接口或注解方式自定义业务扩展点。
  • 全局选项、国际化、统一响应等能力,提升了开发一致性和效率。

这些能力极大降低了开发门槛,让开发者专注于业务创新。具体用法可参考源码和注释。