【magic-api】解决magic-api备份时,无法正确获取到用户名的问题

前言

在ruoyi框架中集成magic-api时遇到一个问题,在做接口备份的时候,总是备份不成功,查看后台日志,发现,提示create_by字段存入的数据过长,在加长以后,就得到一个对象字符串。
com.ocb.project.system.user.domain.User@7b292662[
  userId=1
  deptId=103
  loginName=admin
  userName=若依
  userType=00
  email=ry@163.com
  phonenumber=15888888888
  sex=1
  avatar=
  password=29c67a30398638269fe600f73a054934
  salt=111111
  status=0
  delFlag=0
  loginIp=127.0.0.1
  loginDate=Tue Aug 13 14:46:04 CST 2024
  createBy=admin
  createTime=Tue Aug 13 14:46:04 CST 2024
  updateBy=
  updateTime=<null>
  remark=管理员
  dept=com.ocb.project.system.dept.domain.Dept@1f63a475[
  deptId=103
  parentId=101
  ancestors=0,100,101
  deptName=研发部门
  orderNum=1
  leader=若依
  phone=<null>
  email=<null>
  status=0
  delFlag=<null>
  createBy=<null>
  createTime=<null>
  updateBy=<null>
  updateTime=<null>
]
  roles=[com.ocb.project.system.role.domain.Role@261b2300[
  roleId=1
  roleName=超级管理员
  roleKey=admin
  roleSort=1
  dataScope=1
  status=0
  delFlag=<null>
  createBy=<null>
  createTime=<null>
  updateBy=<null>
  updateTime=<null>
  remark=<null>
]]
]
可以看到,这是一个user对象的序列化字符串。

寻找原因

在magic-api的源码中查找获取登录用户名的方法
	@PostMapping("/backup/full")
	@ResponseBody
	public JsonBean<Boolean> doBackup() throws IOException {
		notNull(service, BACKUP_NOT_ENABLED);
		service.doBackupAll("主动全量备份", WebUtils.currentUserName());
		return new JsonBean<>(true);
	}

可以看到,使用的是WebUtils获取了当前用户

	public static String currentUserName() {
		Optional<MagicHttpServletRequest> request = Optional.ofNullable(magicRequestContextHolder.getRequest());
		return request.map(r -> (MagicUser) r.getAttribute(Constants.ATTRIBUTE_MAGIC_USER))
				.map(MagicUser::getUsername)
				.orElseGet(() -> request.map(MagicHttpServletRequest::getUserPrincipal)
						.map(Principal::getName)
						.orElse(null)
				);
	}

解决方法

可以看到,这里的逻辑是,尝试获取magicapi自己的标准化用户信息,如果没有获取到,就使用 Principal 的getName方法,否则,返回null
Principal 是java.security下的一个接口,我们要做的就是,在magicapi获取到的用户类上实现这个接口的getName方法就可以了
public class User extends BaseEntity implements Principal
{
    /** 登录名称 */
    @Excel(name = "登录名称")
    private String loginName;
    
    public String getName() {
    	return this.loginName;
    }
}

在这里插入图片描述

可以看到,这里备份时,已经能正确的获取到用户信息了
修改之前,这里会看到一个麻花一样的字符串,非常的影响观感

<think>好的,我现在需要处理用户关于Magic-API的查询。用户希望了解Magic-API的文档和使用教程,而提供的引用内容中提到了整合Git插件、环境配置以及项目搭建和导入文件的相关信息。首先,我应该整理这些引用内容中的关键点,并按照用户的要求结构化回答。 首先,引用[2]提到了官方文档的链接,这是必须放在最前面的,方便用户直接访问。然后,用户可能需要的入门教程,引用[2]和[3]都涉及到环境配置和项目搭建,需要分步骤说明。接下来,关于Git插件的整合,引用[1]详细说明了生成RSA密钥的过程,这部分需要详细展开,因为用户可能遇到PG数据库的兼容问题,而Git备份是一个解决方案。此外,用户可能还会遇到常见问题,比如导入zip文件,引用[3]提到导入按钮的位置需要强调。 接下来,生成相关问题要考虑用户可能的后续需求,比如配置问题、数据备份、接口调试和安全性等。这些问题需要覆盖Magic-API的不同使用场景和潜在难点,帮助用户全面了解。 需要确保回答符合系统级指令,特别是使用正确的中文和LaTeX格式,但看起来当前内容中不需要数学公式,所以可能不需要处理这部分。另外,引用标识要自然地添加在相关段落末尾,检查每个引用是否准确对应。 最后,整体结构要清晰,分点说明,步骤详细,确保用户能够一步步跟随操作。同语言要简洁明了,避免技术术语过多,方便不同层次的用户理解。检查是否有遗漏的引用或信息,确保所有引用的内容都被合理利用。确认所有链接和命令正确无误,特别是SSH密钥生成命令和官方文档链接。完成这些后,回答应该能满足用户的需求,并引导他们进一步探索Magic-API的使用。</think>### Magic-API 使用指南 Magic-API 是一个基于Java的接口快速开发框架,支持通过可视化配置生成API。以下是其核心使用文档和教程整理: #### 1. 官方文档与基础配置 - **官方文档**:Magic-API 的完整文档可访问 [https://www.ssssssss.org/magic-api](https://www.ssssssss.org/magic-api),包含环境配置、API编写规范等基础内容[^2]。 - **环境搭建**(SpringBoot集成): ```xml <!-- pom.xml 添加依赖 --> <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> ``` 配置 `application.yml` 文件启用Magic-API控制台。 #### 2. 项目文件导入 - **导入ZIP文件**:在Magic-API控制台界面中,通过右上角的 **「导入」** 按钮上传ZIP格式的接口文件包[^3]。 - **文件结构要求**:ZIP包需包含完整的接口定义文件(如 `.json` 或 `.dsl` 文件)。 #### 3. Git插件整合(解决PG兼容问题- **生成RSA密钥**: ```bash ssh-keygen -t rsa -b 2048 -m PEM # 生成密钥对用于Git仓库鉴权[^1] ``` - **配置Git备份**: 在Magic-API管理界面中配置Git仓库地址、分支及密钥路径,实现接口版本控制。 #### 4. 常见问题 - **历史记录查看**:默认PG数据库可能无法显示接口历史,建议优先使用Git备份功能。 - **接口调试**:通过控制台的 **「在线调试」** 模块可直接测试接口,支持参数动态注入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值