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
?
class="dp-j">
- blacklist_list("blacklist_list",?"黑名单分页查询",?"/rest/tsBlackListController",?"GET",?1)??
- blacklist_list?为接口编码??
?
?
3.?接口管理
?
? ? 3.1 ?配置接口权限,
? ?
? ? 接口权限管理--接口权限录入,
?
??
? ? ? 接口添加:
?
?
? ? 说明:
?
- 接口权限编码:该编码比较重要,每个接口一个编码,不能重复。该编码由开发者制定(见接口权限开发,接口编码定义)
- 接口权限名称:定义名称
- 接口权限等级:一级权限,下级权限区分
- 父级接口:上下级关系维护(父子关系)
- 接口权限地址:接口请求地址
- 请求方式:GET、POST、PUT、DELETE
- 接口权限排序:树形列表展示的顺序
? ? 以上信息:接口权限编码字段比较重要,其他的字段与权限控制无关,只做说明使用
?
?
? ? 3.2 增加数据规则权限
?
????
?
?
4.?创建接口角色
?
? ? 4.1 创建接口角色,进行角色授权,然后分配角色给接口用户
? ? ??
? ? 接口权限---接口角色管理 ??创建接口角色
?
?
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));??
- ????} ?