跳到主要内容

系统上下文变量

系统变量 是预置的一些和当前登录人相关的变量,如:用户账号、用户部门编码,在解析sql/api地址时,将自动替换成真实的变量值,并支持用户自定义变量名,但仅限于在jeecgboot中集成报表。

默认系统变量

属性名描述用法
sysUserCode当前登录人账号 V1.0.10+#{sysUserCode}
sysDate当前日期的字符串 格式为 yyyy-MM-dd V1.3.3-beta+#{sysDate}
sysDateTime当前时间的字符串 格式为yyyy-MM-dd HH:mm:ss V1.3.3-beta+#{sysDateTime}

说明:目前默认系统变量均使用#{}方式取值。

SQL数据源使用系统变量

测试示例:只看当前登录人的数据,使用admin登录。

1.1 数据展示

1.2 设计步骤

  • 表数据:

  • 录入sql解析:select * from test_sys_param where name = '#{sysUserCode}'

  • 设计器页面设置数据:

API数据源使用系统变量

根据系统时间获取数据

1.1 数据展示

1.2 设计步骤

  • 部分后台返回json数据

  • 录入API解析

  • 设计器页面设置数据

API请求 BasePath 变量

系统变量 {{ domainURL }}

对于api请求,需要填写api请求地址,如果请求的是本地项目自带的接口,通常还是需要带上域名/ip: http://localhost:8080/jeecg-boot/test/api/one

可以使用简写{{ domainURL }}替换之,如: {{ domainURL }}/test/api/one

如何自定义系统变量

如果重写了getUserInfo方法,则下系统默认变量会失效,以重写的方法内设置的map为准。

步骤: 1.JeecgBoot集成积木报表

2.添加权限实现类,主要实现方法 getUserInfo

实现系统变量(包含非自定义),需要实现getToken方法,并且保证返回的token不为空;

token主要用于获取用户信息,避免出现安全漏洞

package org.jeecg.config.jimureport;

import org.jeecg.common.constant.DataBaseConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.system.vo.SysUserCacheInfo;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.common.util.TokenUtils;
import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@Component
class JimuReportTokenService implements JmReportTokenServiceI {
@Autowired
private ISysBaseAPI sysBaseAPI;
@Autowired
@Lazy
private RedisUtil redisUtil;

@Override
public String getToken(HttpServletRequest request) {
return TokenUtils.getTokenByRequest(request);
}

@Override
public String getUsername(String token) {
return JwtUtil.getUsername(token);
}

@Override
public Boolean verifyToken(String token) {
return TokenUtils.verifyToken(token, sysBaseAPI, redisUtil);
}

@Override
public Map<String, Object> getUserInfo(String token) {
String username = JwtUtil.getUsername(token);
//此处通过token只能拿到一个信息 用户账号 后面的就是根据账号获取其他信息 查询数据或是走redis 用户根据自身业务可自定义
SysUserCacheInfo userInfo = sysBaseAPI.getCacheUser(username);
Map<String, Object> map = new HashMap<String, Object>();
//设置账号名
map.put("sysUserCode", userInfo.getSysUserCode());
//设置部门编码
map.put("sysOrgCode", userInfo.getSysOrgCode());
// 将所有信息存放至map 解析sql会根据map的键值解析,可自定义其他值
return map;
}
}