LoopAuth 2.X 版本发布,这可能是你第一次使用 ABAC 鉴权

LoopAuth 发布已经有些时日了,在LoopAuth 1.X版本中,一直使用Rbac的鉴权方式。

LoopAuth 这个项目在创建初期,就已经思考加入ABAC的鉴权模式。

9月份摆烂一个月后,LoopAuth 2.X版本现在已发布: 重构完成,加入ABAC鉴权模式,将原有核心模块拆分为SessionRBACABAC三块。

相关链接

ABAC初体验

添加依赖

  • ${version}请查看版本历史,请使用最新正式版,且版本与其余拓展最好保持一致
<!-- LoopAuth的Springboot插件 -->
<dependency>
    <groupId>com.sobercoding</groupId>
    <artifactId>LoopAuth-spring-boot-starter</artifactId>
    <version>${version}</version>
</dependency>

实现AbacInterface接口

  • LoopAuthHttpMode为请求类型的枚举,包括GET、PUT、POST或ALL等等所有常见的请求类型
public class AbacInterFaceImpl implements AbacInterface {

    /**
     *  获取一个或多个路由/权限代码所属的 规则
     * @param route 路由
     * @param loopAuthHttpMode 请求方式
     * @return 去重后的集合
     */
    @Override
    public Set<Policy> getPolicySet(String route, LoopAuthHttpMode loopAuthHttpMode) {
        // 这里只做演示,自行编写的时候,请根据自己存储abac规则的方式查询获取
        Set<Policy> set = new HashSet<>();
        // 根据路由地址及请求方式查询 插入
        if (route.equals("/test/abac") && loopAuthHttpMode.equals(LoopAuthHttpMode.GET)){
            set.add(new Policy()
                    // 规则名称
                    .setName("test")
                    // 规则中的属性名称 及 属性值 用于后续进行 规则匹配校验
                    .setProperty("loginId", "2")
            );
        }
        return set;
    }
}

自动注入

  • AbacInterface的实现类上加上@Component注解即可
@Component
public class AbacInterFaceImpl implements AbacInterface {
    ...
}

手动注入

  • 保证项目启动时执行下面语句即可
AbacStrategy.setAbacInterface(new PermissionInterfaceImpl());

初始化ABAC鉴权规则

  • 需要保证项目启动时 执行以下代码
  • 以下代码以匹配loginId为例
  • 请根据自己需求更改
AbacStrategy.abacPoAndSuMap = new AbacPolicyFunBuilder()
        // 自定义登录id校验的鉴权规则
        .setPolicyFun("loginId",
                // 创建规则校验及获取当前值的方式
                new AbacPoAndSu()
                        // 创建校验方式  value为当前值即setSupplierMap提供的值
                        // rule为规则的值即 Policy setProperty 的值
                        .setMaFunction((value, rule) -> {
                            // 当前用户id需要与规则匹配才可访问  否则 抛出异常
                            if (!value.equals(rule)){
                                throw new LoopAuthPermissionException(LoopAuthExceptionEnum.NO_PERMISSION);
                            }
                        })
                        // 获得value方式
                        .setSupplierMap(() -> "2")
        ).build();


注入拦截器

@Component
public class LoopAuthMvcConfigure implements WebMvcConfigurer {
    /**
     * 注册LoopAuth 的拦截器,打开注解式鉴权功能
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // abac拦截器
        registry.addInterceptor(new InterceptorBuilder().Abac().builder()).addPathPatterns("/**");
    }
}

创建Controller测试一下

  • 可以更改setSupplierMap()中的返回值、或请求类型理解
    @GetMapping("/test/abac")
    public String abac1(){
        return "检测成功";
    }
优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/213864

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。