跳到主要内容

定义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表单展示数据

三、传递Token方式

  • 访问地址: {项目前缀}/jmreport/list?token=${token}
  • 在地址后面拼接上token值(这个由自己的业务完成)

原地址:

https://bootapi.jeecg.com/jmreport/view/1331429368098066432?token=???

程序拿到token后,会自动把token放在请求Header中,这样接口就可以接受到token,进行简单的权限验证。

目前在Header设置了两个参数:

1、token
2X-Access-Token(更方便与jeecgboot项目集成)

这样就完成了一个相对简单的权限控制,可以控制接口访问安全。

四、报表访问授权控制

针对报表预览请求地址进行权限控制的话,自己写个spring拦截器就可以了