系统上下文变量
系统变量 是预置的一些和当前登录人相关的变量,如:用户账号、用户部门编码,在解析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;
}
}