zoukankan      html  css  js  c++  java
  • jeecg接口开发及权限实现原理

    接口开发使用的框架

    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 为了演示方便,直接把所有接口放在类文件来定义了,该类主要代码如下:

    public enum InterfaceEnum {
        blacklist_list("blacklist_list", "黑名单列表查询", "/rest/tsBlackListController", "GET", 1),
        blacklist_get("blacklist_get", "黑名单单条数据查询", "/rest/tsBlackListController/{id}", "GET", 2),
        blacklist_add("blacklist_add", "黑名单添加", "/rest/tsBlackListController", "POST", 3),
        blacklist_edit("blacklist_edit", "黑名单编辑", "/rest/tsBlackListController", "PUT", 4),
        blacklist_delete("blacklist_delete", "黑名单删除", "/rest/tsBlackListController/{id}", "DELETE", 5); 
        /**
         * 接口编码
         */
        private String code;
        /**
         * 接口名称
         */
        private String name;
        /**
         * 接口url
         */
        private String url;
        /**
         * 接口请求方式
         */
        private String method;
        /**
         * 接口排序
         */
        private Integer sort;
    
        private InterfaceEnum(String code, String name, String url, String method, Integer sort) {
            this.code = code;
            this.name = name;
            this.url = url;
            this.method = method;
            this.sort = sort;
        }
        ...
    }
    

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

    总结

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

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



    作者:码语生活
    链接:https://www.jianshu.com/p/9fb12455730b
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    微软一站式示例代码浏览器 v5.1 更新
    Developers’ Musthave: the new Microsoft AllInOne Code Framework Sample Browser and 3500+ samples
    栈溢出攻击 [转]
    深入浅出Java的访问者模式 [转]
    优先级反转 [转]
    latex 引用section [转]
    linux内存管理浅析 [转]
    静态,动态,强类型,弱类型 [转]
    linux硬链接与软链接 [转]
    GCC __attribute__ 详解 [转]
  • 原文地址:https://www.cnblogs.com/Jeely/p/11313047.html
Copyright © 2011-2022 走看看