接口开发使用的框架

jeecg本身是基于 Spring MVC 框架搭建的,因此,使用 Spring MVC 框架的 RESTful API 功能来进行接口开发就是顺理成章的事了。

接口的拦截与鉴权

与对普通请求的拦截一样,也是利用了 Spring MVC 的 Interceptor 机制来对接口的请求进行拦截,实现逻辑在 org.jeecgframework.jwt.aop.RestAuthTokenInterceptor 这个类的 preHandle( ) 方法。从代码可以看出,用户的身份是放在 X-AUTH-TOKEN 这个请求头里的字符串,而事件的身份认证是采用了 JWT (JSON web token) 规范来实现的。

除了对 url 的拦截外,jeecg还实现了接口级别的权限授权管理,具体实现代码可参考 demo 里的 com.jeecg.black.controller.TsBlackListController 这个类。在具体接口的第一行代码,我们可以看到有调用以下方法:
org.jeecgframework.web.system.util.InterfaceUtil.getInterfaceRuleDto(HttpServletRequest request,InterfaceEnum interfaceEnum);

InterfaceEnum 类是对接口的枚举,demo 为了演示方便,直接把所有接口放在类文件来定义了,该类主要代码如下:

  1. public enum InterfaceEnum {
  2. blacklist_list("blacklist_list", "黑名单列表查询", "/rest/tsBlackListController", "GET", 1),
  3. blacklist_get("blacklist_get", "黑名单单条数据查询", "/rest/tsBlackListController/{id}", "GET", 2),
  4. blacklist_add("blacklist_add", "黑名单添加", "/rest/tsBlackListController", "POST", 3),
  5. blacklist_edit("blacklist_edit", "黑名单编辑", "/rest/tsBlackListController", "PUT", 4),
  6. blacklist_delete("blacklist_delete", "黑名单删除", "/rest/tsBlackListController/{id}", "DELETE", 5);
  7. /**
  8. * 接口编码
  9. */
  10. private String code;
  11. /**
  12. * 接口名称
  13. */
  14. private String name;
  15. /**
  16. * 接口url
  17. */
  18. private String url;
  19. /**
  20. * 接口请求方式
  21. */
  22. private String method;
  23. /**
  24. * 接口排序
  25. */
  26. private Integer sort;
  27. private InterfaceEnum(String code, String name, String url, String method, Integer sort) {
  28. this.code = code;
  29. this.name = name;
  30. this.url = url;
  31. this.method = method;
  32. this.sort = sort;
  33. }
  34. ...
  35. }

每个接口对应一个枚举类型,在 getInterfaceRuleDto( ) 方法里会校验当前用户是否被授予了该枚举类型对应的 code 的权限。而接口权限的授予跟普通菜单的权限管理界面类似,同时也支持数据权限的设置,实现原理可参考我之前写的关于权限相关的文章。

总结

jeecg对接口的实现原理大体与普通页面的实现原理一致,而提供接口方式主要是为了跟第三方系统对接,可以让第三方系统方便地调用接口操作数据。因此,jeecg框架引入了 JWT token 的方式来实现接入权限的校验。由于接口的使用场景与普通页面的使用场景不同,于是专门针对接口单独做了一套权限管理逻辑,可以说是在一个管理系统里平行实现了两套权限管理,分别针对接口和普通页面,但实现的逻辑和流程都是类似的。

以上是对jeecg框架接口开发及权限实现原理的简单分析,希望能对读者在接口设计、开发及管理的思考中有一点点启发和借鉴作用。

作者:码语生活
链接:https://www.jianshu.com/p/9fb12455730b
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

jeecg接口开发及权限实现原理的更多相关文章

  1. PHP接口开发加密技术实例原理与例子

    下面例子简单讲解PHP接口开发加密技术:如app要请求用户列表,api是“index.php?module=user&action=list”app生成token = md5sum (‘use ...

  2. 实用干货!Java开发企业级权限管理系统视频教程

    全程手把手带你运用Java技术栈,打造一套基于最流行的RBAC拓展模型的,分布式的,有界面的,高灵活性,高拓展性的企业级权限管理系统.学完本课程你将可以轻松应对绝大多数企业开发中与权限管理及后台系统相 ...

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

    1.功能介绍   通过接口配置实现,对接口的访问权限控制和数据权限控制,接口时REST接口,接口权限认证机制使用Json web token (JWT) 接口权限调用流程: (1)通过接口用户的用户名 ...

  4. PHP服务器端API原理及示例讲解(接口开发)

    http://www.jb51.net/article/136816.htm 下面小编就为大家分享一篇PHP服务器端API原理及示例讲解(接口开发),具有很好的参考价值,希望对大家有所帮助 相信大家都 ...

  5. shopnc 支持 支付宝快捷登陆 shopnc权限验证原理说明

    为目前使用的是shopnc商场二次开发,shopnc本身做了qq互联和微博快捷登陆的api,做成了集成通用的接口 首先说下基本的这种类型的api访问方式,首先,的有个配置文件,配置你申请的id和key ...

  6. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  7. C#.NET微信公众账号接口开发系列文章整理--微信接口开发目录,方便需要的博友查询

    前言: 涉及微信接口开发比较早也做的挺多的,有时间的时候整理了开发过程中一些思路案例,供刚学习微信开发的朋友参考.其实微信接口开发还是比较简单的,但是由于调试比较麻烦,加上微信偶尔也会给开发者挖坑,并 ...

  8. php支付宝在线支付接口开发教程【转】

    php支付宝在线支付接口开发教程 这篇文章主要为大家详细介绍了php支付宝在线支付接口开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   1.什么是第三方支付 所谓第三方支付,就是一些和各 ...

  9. C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

    文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...

随机推荐

  1. Linux命令 uname

    1.简介 管理系统而使用的命令,用于显示系统信息(不同linux版本可能有写差异) 2.语法 uname [-amnrsv] (1) -a,--all 显示所有的信息 (2) -s,--kernel- ...

  2. Tomcat负载均衡、调优核心应用进阶学习笔记(一):tomcat文件目录、页面、架构组件详解、tomcat运行方式、组件介绍、tomcat管理

    文章目录 tomcat文件目录 bin conf lib logs temp webapps work 页面 架构组件详解 tomcat运行方式 组件介绍 tomcat管理 tomcat文件目录 ➜ ...

  3. Struts1.3——Struts标签

    1.struts标签的介绍 Struts框架提供了一组非常丰富的框架组件,同时也提供了一组标签库用于和这些组件交互,主要介绍以下三类: html标签 bean标签 logic标签 2.Html标签库 ...

  4. 9.Jmeter自定义Sample(自定义测试内容)完成测试

    问题:在某些场景下我们会发现Jmeter里面提供的各种Sample不能满足自己的需求,应为这个世界上的压力测试的逻辑本来就是千变万化的,所以这个时候我们如果自己实现一套测试逻辑(当Jmeter的基本e ...

  5. Cocos2d-x之项目结构分析

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 1.下面是我们创建cocos2d的工程MyGame01里的文件资源 2. 在下面:文件解决方案下面有6个项目,我们的启动优先项为MyGam ...

  6. 实用maven笔记二-信息&依赖管理

    目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...

  7. 使用pip安装python模块和包

    点击进入幕布视图浏览 https://mubu.com/doc/a8VGCUfqqw 五.使用pip安装python第三方库. pip的常用命令 方式一:在线安装 1.进入命令行 2.敲入pip命令: ...

  8. suffixes - 列出文件后缀。

    DESCRIPTION [描述] 文件后缀与文件名之间以点(.)间隔,通常包括一个或多个字母. 我们用文件后缀来描述文件的内容.很多标准的实用程序,如编译器,以后缀来识别文件类型. make(1) 就 ...

  9. RK3288 android切换耳麦通道

    通过耳机状态切换耳机mic与板子麦/work/rk3288/firefly-rk3288_android5.1_git_20180126/kernel/sound/soc/codecs/es8323. ...

  10. 8、Python MySQL - mysql-connector 驱动

    一. 在线安装 mysql-connector :  pip install mysql-connector-python 二.操作流程 1.连接数据库信息: conn =  mysql.connec ...