对接Token鉴权和权限
关于报表访问权限认证方案,通过此方案可以实现登录访问控制、敏感功能要求拥有角色才可访问、要求拥有权限指令才可访问。
一、自定义Token鉴权和角色权限
定义Token鉴权和角色权限、指令权限控制,需要实现下接口 JmReportTokenServiceI , 不实现则报表默认不做权限控制。
@Component
public class JimuReportTokenService implements JmReportTokenServiceI
登录token集成
/**
* 自定义获取TOKEN
* @param request
* @return
*/
@Override
public String getToken(HttpServletRequest request) {
//System.out.println("---------call---------getToken-----------------------");
return "token令牌";
}
/**
* Token校验
* @param token
* @return
*/
@Override
public Boolean verifyToken(String token) {
//System.out.println("---------verify-----Token---------------");
return true;
}
登录租户集成
/**
* 自定义获取租户
* @return
*/
@Override
public String getTenantId() {
return "1";
}
登录角色集成
/**
* 自定义用户拥有的角色
*
* @param token
* @return
*/
@Override
public String[] getRoles(String token) {
return new String[]{"admin","lowdeveloper","dbadeveloper"};
}
登录人拥有权限集成
/**
* 自定义用户拥有的权限指令
*
* @param token
* @return
*/
@Override
public String[] getPermissions(String token) {
return new String[]{"drag:datasource:testConnection","onl:drag:clear:recovery","drag:analysis:sql","drag:design:getTotalData"};
}
集成代码参考示例
二、积木默认权限控制的功能
v1.9.3+ 开始支持类似@RequiresPermissions用法。
权限指令的用法,可以参考shiro的权限注解 @RequiresPermissions 集成积木报表,需要把登录人拥有的权限指令传递给积木报表。
| 指令 | 功能 |
|---|---|
drag:datasource:testConnection | 仪表盘数据库连接测试 |
onl:drag:clear:recovery | 仪表盘清空回收站 |
drag:analysis:sql | 仪表盘SQL解析 |
drag:design:getTotalData | 仪表盘对Online表单展示数据 |
jmreport:datasource:testConnection | 报表数据源连接测试 v2.5.3+ |
jmreport:datasource:saveOrUpate | 报表数据源新增/编辑 v2.5.3+ |
jmreport:datasource:delete | 报表数据源删除 v2.5.3+ |
jmreport:design:parseField | 报表数据集-解析字段(SQL/API/JavaBean) v2.5.4+ |
jmreport:design:loadTable | 报表库表/字段元数据查询 v2.5.4+ |
jmreport:design:saveDb | 报表数据集保存 v2.5.4+ |
jmreport:design:filesDataset | 报表文件数据集 v2.5.4+ |
jmreport:design:editEnhance | 报表增强代码(JS/CSS/Python) v2.5.4+ |
jmreport:datasource:query | 报表数据源查询 v2.5.4+ |
上表只列出常用指令,报表设计器与大屏的完整按钮权限编码清单(分类、报表分组、定时导出、地图、数据源等),见 积木报表/大屏 按钮权限。
三、传递Token方式
- 访问地址:
{项目前缀}/jmreport/list?token=${token} - 在地址后面拼接上token值(这个由自己的业务完成)
原地址:
https://bootapi.jeecg.com/jmreport/view/1331429368098066432?token=???
程序拿到token后,会自动把token放在请求Header中,这样接口就可以接受到token,进行简单的权限验证。
目前在Header设置了两个参数:
1、token
2、X-Access-Token(更方便与jeecgboot项目集成)

这样就完成了一个相对简单的权限控制,可以控制接口访问安全。
四、报表访问授权控制
针对报表预览请求地址进行权限控制的话,自己写个spring拦截器就可以了
