关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 11122|回复: 1

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

[复制链接]
发表于 2018-2-7 14:52:47 | 显示全部楼层 |阅读模式
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   类中定义接口编码
[java] view plain copy


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

3. 接口管理

3.1  配置接口权限,
    接口权限管理--接口权限录入,

06.png

  接口添加:

07.png

说明:

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

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


3.2 增加数据规则权限

    08.png
09.png

4. 创建接口角色
4.1 创建接口角色,进行角色授权,然后分配角色给接口用户
      接口权限---接口角色管理   创建接口角色

31.png

32.png
5. 接口开发实现
    接口中增加业务逻辑:
    5.1 校验接口访问权限

[java] view plain copy


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

    5.2 接口权限规则注入

     方案一:查询器处理


[java] view plain copy


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

    方案二:Sql和hql 处理

[java] view plain copy


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


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

6. 接口测试

[java] view plain copy


  • //获取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));  
  •     }  


发表于 2018-7-3 15:08:35 | 显示全部楼层
我按照上边的流程来做,自定义开发了接口,结果还是没办法调通,但是调试自带的黑名单示例接口确可以。
报错信息:

======获取token=======eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJ1aWMwMiIsInN1YiI6InVpYzAyIiwiaWF0IjoxNTMwNjAwNTQ3fQ.ceUEc2Z5TjezA29ZiFUUcQ74UTUU0UJEJse1D3BZHNg
java.io.FileNotFoundException: http://localhost:8080/jeecg/rest/appUserController
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1623)
        at org.jeecgframework.jwt.util.JwtHttpUtil.httpRequest(JwtHttpUtil.java:63)
        at test.InterfaceTest.getAppUserList(InterfaceTest.java:34)
        at test.InterfaceTest.main(InterfaceTest.java:17)

求指导~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表