LoopAuth
公布曾经有些时日了,在LoopAuth
1.X版本中,始终应用Rbac的鉴权形式。
LoopAuth
这个我的项目在创立初期,就曾经思考退出ABAC
的鉴权模式。
9月份摆烂一个月后,LoopAuth
2.X版本当初已公布: 重构实现,退出ABAC
鉴权模式,将原有外围模块拆分为Session
、RBAC
、ABAC
三块。
相干链接
- Gitee
- GitHub
- 官网文档
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
注解即可
@Componentpublic 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();
注入拦截器
@Componentpublic 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 "检测胜利"; }