RuoYi前后端分离项目集成magic-api,并继承RuoYi的权限认证体系来管理magic-api
一、背景
由于magic-api的接口没有权限控制,所以风险系数较高,于是公司决定将magic-api整合集成到ruoyi框架中,成为若依的一部分,并完全继承若依的权限认证体系,即 用户必须登录若依之后,才可以访问magic-api管理界面,并进行接口开发
二、致命问题
RuoYi集成magic-api,其实很简单,网上也有很多的教程,但是要想让magic-api继承ruoyi的权限认证体系。就要解决一个重要且致命的问题:
即 magic-api必须得获取到RuoYi的token
那要怎么获取RuoYi用户登录的token呢?接下来进入正题
三、开始表演
1、引入依赖
ruoyi框架要想集成magic-api项目,首先需要引入maven依赖,本文以2.1.1版本为例
<dependency><groupId>org.ssssssss</groupId><artifactId>magic-api-spring-boot-starter</artifactId><version>2.1.1</version>
</dependency>
2、新增表
需要再Ruoyi的数据库中,增加两张magic-api相关的表:
- magic_api_file
- magic_api_backup
3、application.yml增加magic-api配置信息
主要的配置信息如下:
magic-api:web: /magic/workspaceresource:type: database # 配置接口存储方式,这里选择存在数据库中table-name: magic_api_file # 数据库中的表名prefix: /magic-api # key前缀prefix: /srvhub # 接口前缀,可以不配置auto-import-module: db #开启自定义模块auto-import-package: java.lang.*,java.util.* #自动导包editor-config: classpath:./magic-editor-config.js #编辑器配置debug:timeout: 60 # 断点超时时间,默认60spage:size: size # 页大小的参数名称page: page # 页码的参数名称thread-pool-executor-size: 8 # async语句的线程池大小throw-exception: false #执行出错时是否抛出异常response-code:success: 0 #执行成功的code值invalid: 1 #参数验证未通过的code值exception: -1 #执行出现异常的code值backup: #备份相关配置enable: truemax-history: 30
table-name: magic_api_backup
其中有一段这样的配置:
editor-config: classpath:./magic-editor-config.js
这个暂且不表,后面会解开真相。
4、在resource目录下增加magic-editor-config.js文件
上面提到了这个js文件,接下来我们展开说一下,首先,需要把这个文件添加到项目中,直接放到resource目录下:
这个magic-editor-config.js文件的具体内容如下:
var MAGIC_EDITOR_CONFIG = {getMagicTokenValue: function(){var cookies = document.cookie;const token = cookies.match(/Admin-Token=([^,;]+)/);console.log("^^^^^^^^^^^^ :" + token)if (token && token.length > 1) {return token[1];} else {return null; // 或者 throw new Error('Admin-Token not found');}}
}
该文件作用:就是为了获取ruoyi项目中的token,因为在magic-api中无法获取ruoyi用户登录的token。
再次强调一下,此文件会在application.yml文件中引用,如下:
magic-api:
editor-config: classpath:./magic-editor-config.js #编辑器配置
5、SecurityConfig文件配置
对请求路径/magic/web/**放行,交给magic-api处理,配置如下:
.antMatchers(“/magic/workspace/**”).anonymous()
6、开发magic-api登录认证拦截器类CustomAuthorizationInterceptor
直接在ruoyi后端项目中,增加拦截器类CustomAuthorizationInterceptor,当直接访问magic-api时,会判断用户是否登录,如果未登录,则直接打回。主要代码逻辑和若依的登录逻辑几乎一样的,具体代码如下:
package com.hidata.magicapi.interceptor;import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.