跳到主要内容

对接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拦截器就可以了