Magic-api使用自定义鉴权类CustomAuthorizationInterceptor 后,页面收不到调试信息

加magic-api交流群请教群主解决了这一问题。
springboot版本2.3.6Release
Magic-api版本2.1.0
分为三步
1、配置编辑器
2、前端获取token
3、后端解析token

1、配置编辑器

参考:https://www.ssssssss.org/magic-api/pages/config/editor/#getmagictokenvalue

 getMagicTokenValue: function(){
	// 自行获取magic-api需要的token
	return token;  
 }

指定后台配置文件:
magic-api.editor-config=classpath:./magic-editor-config.js

2、前端获取token

magic-editor-config.js:

var MAGIC_EDITOR_CONFIG = {
    title: 'magic-api',
    checkUpdate: false,
    header: {
        skin: false,    // 屏蔽皮肤按钮
        document: false,    // 屏蔽文档按钮
        repo: true,    // 屏蔽gitee和github
        qqGroup: true  // 屏蔽加入QQ群
    },
    getMagicTokenValue: function(){
        // 自行获取magic-api需要的token 这里我的magic-qpi在iframe里父级url中有token
        var token = "";
        var currentTopHref = window.top.location.href;
        console.log('currentTopHref', currentTopHref);
        var reg = new RegExp("(^|&)token=([^&]*)(&|$)");
        var r = currentTopHref.match(reg);
        if (r != null){
            token = unescape(r[2]);
        }
        return token;
    }
}

3、后端解析token

CustomAuthorizationInterceptor.class:

package com.jqp.admin.myapi.interceptor;

import com.jqp.admin.db.enums.JdbcInfoEnum;
import com.jqp.admin.util.TokenUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.core.context.MagicUser;
import org.ssssssss.magicapi.core.exception.MagicLoginException;
import org.ssssssss.magicapi.core.interceptor.Authorization;
import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
import org.ssssssss.magicapi.core.model.Group;
import org.ssssssss.magicapi.core.model.MagicEntity;
import org.ssssssss.magicapi.core.servlet.MagicHttpServletRequest;

@Component
public class CustomAuthorizationInterceptor implements AuthorizationInterceptor {

	/**
	 * 配置是否需要登录
	 */
	@Override
	public boolean requireLogin() {
		// 設置需要登錄 这里必须设置为true 不然后边鉴权时 magicUser为空
		return true;
	}

	@Override
	public MagicUser getUserByToken(String token) throws MagicLoginException {
		//對登錄人token處理 獲取magicUser信息
		MagicUser magicUser = TokenUtil.getMagicUser(token);
		if(magicUser!=null){
			return magicUser;
		}
		throw new MagicLoginException("未登录");
	}

	/**
	 * 是否拥有对该接口的增删改权限
	 * 此方法可以不重写,则走默认的 boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization) 方法
	 */
	@Override
	public boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization, MagicEntity entity) {
		// Authorization.SAVE 保存
		// Authorization.DELETE 删除
		// Authorization.VIEW 查询
		// Authorization.LOCK 锁定
		// Authorization.UNLOCK 解锁
		// 自行写逻辑判断是否拥有如果有,则返回true,反之为false
                // 这里存疑 entity.getCreateBy(), entity.getUpdateBy() 会为空
		return hasAuth(magicUser, entity.getCreateBy(), entity.getUpdateBy(), authorization);
	}

	/**
	 * 是否拥有对该分组的增删改权限
	 * 此方法可以不重写,则走默认的 boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization) 方法
	 */
	@Override
	public boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization, Group group) {
		// Authorization.SAVE 保存
		// Authorization.DELETE 删除
		// Authorization.VIEW 查询
		// 自行写逻辑判断是否拥有如果有,则返回true,反之为false
                // 这里存疑 entity.getCreateBy(), entity.getUpdateBy() 会为空
		return hasAuth(magicUser, group.getCreateBy(), group.getUpdateBy(), authorization);
	}
	private boolean hasAuth(MagicUser magicUser, String createBy, String updateBy, Authorization authorization){
		if(StringUtils.isEmpty(createBy)&&StringUtils.isEmpty(updateBy)){
			//创建人和修改人为空 没有鉴权条件 直接通过
			return true;
		}
		if(magicUser==null){
			return false;
		}
		try {
			//是否为本人
			if ((magicUser.getUsername().split("-")[1]).equals(getUserCodeAndUserName(createBy, updateBy))) {
				return true;
			}
		}catch (Exception e){
			e.printStackTrace();
			return false;
		}
		try {
			if (Authorization.VIEW.equals(authorization)) {
				String tenantId = getTenantId(createBy, updateBy);
				if (StringUtils.isBlank(tenantId)) {
					return false;
				} else {
					//根据租户判断是否可以查看
					if (JdbcInfoEnum.PUBLIC.getTenantId().equals(tenantId)) {
						//租户为 public的内容均可查看
						return true;
					}
					return magicUser.getUsername().split("-")[0].equalsIgnoreCase(tenantId);
				}
			} else {
				//保存 或 其他
				return magicUser.getUsername().equals(createBy) || magicUser.getUsername().equals(updateBy);
			}
		}catch (Exception e){
			e.printStackTrace();
			return false;
		}
	}

	private String getTenantId(String createBy, String updateBy){
		if(!StringUtils.isEmpty(createBy)){
			return createBy.split("-")[0];
		}
		if(!StringUtils.isEmpty(updateBy)){
			return updateBy.split("-")[0];
		}
		return "";
	}

	private String getUserCodeAndUserName(String createBy, String updateBy){
		try {
			if (!StringUtils.isEmpty(createBy)) {
				return createBy.split("-")[1];
			}
			if (!StringUtils.isEmpty(updateBy)) {
				return updateBy.split("-")[1];
			}
		}catch (Exception e){
			e.printStackTrace();
		}
		return "";
	}
}
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值