1.​功能介绍


通过接口配置实现,对接口的访问权限控制和数据权限控制,接口时REST接口,接口权限认证机制使用Json web token (JWT)

接口权限调用流程:

    (1)通过接口用户的用户名密码,调用鉴权token接口获取接口用户的token

             该token,2个小时内有效

    (2)把获取的token作为参数,调用接口的时候,会根据token去鉴权

    (3)鉴权通过,接口会根据接口定义的编码,检验是否有访问权限

            有则可以继续访问,无则提示访问受限

    (4)有访问权限,则获取接口的数据权限规则,根据授权的数据权限规则返回需要的数据


     ​实现一个新的接口,无需关注token的鉴权机制,需要实现以下步骤:

    (1)开发一个rest接口

    (2)枚举类InterfaceEnum中定义接口编码

   (3)调用InterfaceUtil工具类getInterfaceRuleDto获取接口权限,验证是否有访问权限,并获取数据权限

   (4)根据获取的数据权限,组装查询条件返回接口数据


2. ​权限接口定义


开发一个接口rest接口,

public​ ​enum​ InterfaceEnum   类中定义接口编码


blacklist_list("blacklist_list", "黑名单分页查询", "/rest/tsBlackListController", "GET", 1)
blacklist_list 为接口编码


3. ​接口管理

3.1  配置接口权限,

    接口权限管理--接口权限录入,


【JEECG技术文档】JEECG 接口权限开发及配置使用说明_数据


  接口添加:


【JEECG技术文档】JEECG 接口权限开发及配置使用说明_jeecg_02


说明:

  • 接口权限编码:该编码比较重要,每个接口一个编码,不能重复。该编码由开发者制定(见接口权限开发,接口编码定义)
  • 接口权限名称:定义名称
  • 接口权限等级:一级权限,下级权限区分
  • 父级接口:上下级关系维护(父子关系)
  • 接口权限地址:接口请求地址
  • 请求方式:GET、POST、PUT、DELETE
  • 接口权限排序:树形列表展示的顺序

    以上信息:接口权限编码字段比较重要,其他的字段与权限控制无关,只做说明使用



3.2 增加数据规则权限


    【JEECG技术文档】JEECG 接口权限开发及配置使用说明_java_03

 【JEECG技术文档】JEECG 接口权限开发及配置使用说明_访问权限_04



4. ​创建接口角色


4.1 创建接口角色,进行角色授权,然后分配角色给接口用户

      接口权限---接口角色管理   创建接口角色


 【JEECG技术文档】JEECG 接口权限开发及配置使用说明_数据_05【JEECG技术文档】JEECG 接口权限开发及配置使用说明_接口权限_06


5. ​接口开发实现


接口中增加业务逻辑:

5.1 校验接口访问权限



InterfaceRuleDto interfaceRuleDto = InterfaceUtil.getInterfaceRuleDto(request, InterfaceEnum.blacklist_list);
if(interfaceRuleDto==null){
return Result.error("您没有该接口的权限!");
}


5.2 接口权限规则注入


     方案一:

     查询器处理


CriteriaQuery cq = new CriteriaQuery(TsBlackListEntity.class, dataGrid);
InterfaceUtil.installCriteriaQuery(cq, interfaceRuleDto, InterfaceEnum.blacklist_list);


    方案二:

    Sql和hql 处理



String qlStr = InterfaceUtil.getQL(interfaceRuleDto, InterfaceEnum.blacklist_list);


  把组装的qlStr 追加到查询语句中


6. 接口测试



//获取token
public static String getToken(String userName,String password){
String url = "http://localhost:8888/jeecg-bpm/rest/tokens?username="+userName+"&password="+password;
String token= JwtHttpUtil.httpRequest(url, "POST", null);
return token;
}


//获取黑名单列表
public static JSONObject getBlackList(String token){
String url = "http://localhost:8888/jeecg-bpm/rest/tsBlackListController";
JSONObject resp= JwtHttpUtil.httpRequest(url, "GET", null,token);
return resp;
}


public static void main(String[] args) {
//接口角色授权的用户账号密码
String token = getToken("interfaceuser","123456");
//获取黑名单列表
System.out.println("======获取黑名单列表======="+getBlackList(token));
}