尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Permify Java REST SDK 实战指南:从 Maven 依赖接入到多租户 API 调用
Permify Java REST SDK 实战指南从 Maven 依赖接入到多租户 API 调用【免费下载链接】permifyAn open-source authorization as a service inspired by Google Zanzibar, designed to build and manage fine-grained and scalable authorization systems for any application. — Permify is now part of FusionAuth 项目地址: https://gitcode.com/GitHub_Trending/pe/permifyPermify 是一个受 Google Zanzibar 启发的开源细粒度授权服务。本文围绕本仓库sdk/java/rest目录下的 Java REST SDK 示例完整讲解从环境准备、构建运行到在自己的 Java 项目中通过 Maven 依赖引入 SDK、创建ApiClient并调用 Permify REST API以创建租户为核心示例的完整流程。读完本文你将掌握基于co.permify:permifyJava SDK 与本地 Permify 服务端联调的标准姿势并能直接套用到权限检查、数据写入等更多 API 场景。1. SDK 概览与前置条件Java REST SDK 示例的核心目标是让 Java 开发者以最少的样板代码通过 REST 协议与 Permify 服务端交互。示例代码位于 sdk/java/rest其pom.xml声明了唯一的 SDK 依赖dependency groupIdco.permify/groupId artifactIdpermify/artifactId version0.0.1/version /dependency在动手之前需要确认本机环境满足Java示例工程按 Java 1.8 编译pom.xml中maven.compiler.source与maven.compiler.target均为1.8因此 JDK 8 及以上均可。Maven用于依赖解析与构建打包。运行中的 Permify 服务端默认客户端连接地址为http://localhost:3476其中端口 3476 是 Permify REST API 的默认监听端口见 internal/config/config.go 中默认Port: 3476的配置以及根目录 README.md 中docker run -p 3476:3476 -p 3478:3478 ghcr.io/permify/permify serve的启动方式。2. 获取示例代码并构建项目示例位于本仓库的sdk/java/rest目录。若需要在本地独立目录获取完整工程可先克隆仓库再进入对应目录git clone https://gitcode.com/GitHub_Trending/pe/permify cd sdk/java/rest随后执行 Maven 构建命令mvn clean install该命令会完成三件事清理旧的构建产物、解析并下载co.permify:permify:0.0.1等依赖、编译源码并打包。示例工程的 pom.xml 还集成了maven-shade-plugin版本 3.6.2会在package阶段将工程与全部依赖合并为单一的可执行 fat jar并将入口类指定为rest.TenantCreatortransformer implementationorg.apache.maven.plugins.shade.resource.ManifestResourceTransformer mainClassrest.TenantCreator/mainClass /transformer因此构建完成后target/目录下会生成包含全部依赖的可运行 jar。3. 运行示例应用构建成功后用java -jar启动应用java -jar target/your-artifact-name-0.0.1.jar其中your-artifact-name-0.0.1.jar需要替换为实际生成的 jar 文件名。根据示例工程 pom.xml 中声明的artifactId与versiongs-maven/0.1.0实际生成的可执行包通常为target/gs-maven-0.1.0.jar。由于 shade 插件已将mainClass写进 MANIFEST直接执行即可触发TenantCreator.main向本地 Permify 服务端发起创建租户请求并打印结果。前提提醒运行前请确保 Permify 服务已在localhost:3476上就绪否则程序会抛出连接异常示例代码中已对异常做捕获并会打印错误发生时间与消息。4. 在自己的项目中使用 Permify Java SDK4.1 添加 Maven 依赖在自己的工程中引入 SDK只需在pom.xml中加入如下依赖dependency groupIdco.permify/groupId artifactIdpermify/artifactId version0.0.1/version /dependencySDK 内部基于 WebFlux 的reactor.core.publisher.Mono封装异步响应因此调用 API 方法会返回MonoT可订阅异步处理也可调用.block()同步等待结果见下文示例。4.2 创建 ApiClient 客户端SDK 的核心入口是org.permify.ApiClient。最简用法如下public static void main(String[] args) { String baseUrl http://localhost:3476; ApiClient apiClient new ApiClient(); apiClient.setBasePath(baseUrl); }关键说明setBasePath(baseUrl)设置服务端地址即 Permify REST API 的根路径默认指向本地 3476 端口该客户端是后续所有 API 调用Tenancy、Schema、Data、Permission 等的公共载体若要启用鉴权可在客户端上统一追加请求头例如示例中通过apiClient.addDefaultHeader(Authorization, Bearer secret)注入 Bearer Token。5. 实战示例通过 TenancyApi 创建租户仓库中的 TenantCreator.java 是一份可直接运行的完整示例演示了「配置客户端 → 注入鉴权头 → 构造请求 → 调用 API → 同步获取响应」的完整链路代码如下package rest; import org.joda.time.LocalTime; import reactor.core.publisher.Mono; import org.permify.ApiClient; import org.permify.api.TenancyApi; import org.permify.model.TenantCreateRequest; import org.permify.model.TenantCreateResponse; public class TenantCreator { public static void main(String[] args) { String baseUrl http://localhost:3476; // Ensure this is the correct port String bearerToken secret; // Replace with your actual bearer token ApiClient apiClient new ApiClient(); apiClient.setBasePath(baseUrl); System.out.println(Created Api Client Endpoint: apiClient.getBasePath()); apiClient.addDefaultHeader(Authorization, Bearer secret); TenancyApi api new TenancyApi(apiClient); try { System.out.println(Sending request to baseUrl with Authorization header Bearer bearerToken); TenantCreateRequest req new TenantCreateRequest(); req.setId(template_tenant2); req.setName(Template); MonoTenantCreateResponse responseMono api.tenantsCreate(req); TenantCreateResponse response responseMono.block(); // Block to get the response synchronously System.out.println(Tenant create response: response); } catch (Exception e) { LocalTime time new LocalTime(); System.out.println(Error occurred at time.toString() : e.getMessage()); } } }逐步拆解这段代码的实战要点配置连接ApiClient设置basePath为 Permify REST 端点bearerToken处应替换为你自己的 Token示例中直接使用secret占位。注入鉴权addDefaultHeader(Authorization, Bearer secret)为后续所有请求统一添加鉴权头。构造请求体TenantCreateRequest通过setId/setName指定租户 ID 与显示名称。对应 REST 接口POST /v1/tenants/create的 JSON 请求体为{id: ..., name: ...}见 docs/api-reference/apidocs.swagger.json 中的 cURL 示例。发起调用api.tenantsCreate(req)返回MonoTenantCreateResponse调用.block()将异步流转换为同步结果便于命令行示例直接打印响应。异常处理捕获异常并打印发生时间与错误信息避免调用失败时静默退出。6. SDK 调用背后的 REST 接口与源码印证Java SDK 的每一次方法调用最终都会转化为对 Permify REST API 的 HTTP 请求。以租户创建为例可沿三层证据理解其实现第一层OpenAPI 契约。docs/api-reference/openapi.json 定义了完整的 API 契约当前仓库标注版本为 v1.7.3其中POST /v1/tenants/create的请求体为TenantCreateRequest成功响应为TenantCreateResponse——这与 SDK 中的org.permify.model.TenantCreateRequest/TenantCreateResponse一一对应说明 Java SDK 是由 OpenAPI 规范生成的类型化客户端。第二层服务端 gRPC 处理。REST 网关会将请求转发到 gRPC 服务。internal/servers/tenancy_server.go 中的TenancyServer.Create是租户创建的核心实现它从请求中取出Id与Name调用t.tw.CreateTenant(ctx, request.GetId(), request.GetName())落库失败时记录 span 并返回 gRPC 错误状态成功则返回包含租户信息的TenantCreateResponse。第三层多租户语义。同一文件还实现了Delete与List方法分别对应DELETE /v1/tenants/{id}与POST /v1/tenants/list。值得注意的是Permify 预置了一个默认租户t1供不启用多租户的场景直接使用见 docs/api-reference/tenancy/create-tenant.mdx。因此Java 应用既可以继续使用t1也可以通过本示例创建自己的租户实现「为不同租户维护独立 schema 与授权数据」的隔离模型。7. 基于 SDK 的后续扩展方向掌握了ApiClient 具体 Api MonoT的调用范式后可平滑迁移到 SDK 暴露的其他 REST API例如Schema 管理写入、读取与列出租户下的 Permify DSL 授权模型对应POST /v1/tenants/{tenant_id}/schemas/write等接口数据管理写入关系元组tuples与属性attributes为权限判定提供数据基础权限判定/v1/tenants/{tenant_id}/permissions/check校验某个主体是否拥有对某资源的某权限、lookup-entity反查主体可访问的资源列表等。上述接口的请求/响应结构均可在 docs/api-reference 下找到对应文档且都遵循与租户创建相同的「构造 Request 对象 → 调用 Api 方法 → 处理 Mono 响应」模式。建议在本地启动 Permify 服务docker run -p 3476:3476 -p 3478:3478 ghcr.io/permify/permify serve后依次将示例中的TenancyApi替换为SchemaApi、DataApi、PermissionApi进行联调验证。【免费下载链接】permifyAn open-source authorization as a service inspired by Google Zanzibar, designed to build and manage fine-grained and scalable authorization systems for any application. — Permify is now part of FusionAuth 项目地址: https://gitcode.com/GitHub_Trending/pe/permify创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

MongoDB 内置 Zstandard 的单文件库生成机制:single_file_libs 合编工具链详解

MongoDB 内置 Zstandard 的单文件库生成机制:single_file_libs 合编工具链详解

MongoDB 内置 Zstandard 的单文件库生成机制:single_file_libs 合编工具链详解 【免费下载链接】mongo The MongoDB Database 项目地址: https://gitcode.com/GitHub_Trending/mo/mongo 在 MongoDB 源码树中,Zstandard(zstd&#xff0…

📅 2026/9/17 7:20:58
VC6环境下PL/0编译器完整实现与调试指南

VC6环境下PL/0编译器完整实现与调试指南

简介:本资源是广东工业大学计算机学院《编译原理》课程的PL/0编译器实验报告文档,面向高校计算机专业本科生及编译原理初学者,聚焦编译系统核心机制的实践理解与扩展开发。报告完整覆盖PL/0语言子集设计、词法与语法分析实现、符号表管理、运…

📅 2026/9/17 7:20:58
软考副高晋升正高政策解析与实操指南

软考副高晋升正高政策解析与实操指南

1. 软考副高晋升正高的政策背景与现状作为一名在IT行业摸爬滚打十余年的老兵,我见证了太多同行对职称评审的困惑。特别是那些通过软考获得副高职称的朋友,最常问的问题就是:"这种考试获得的职称,真的能和评审的职称一样用来申…

📅 2026/9/17 7:15:58
MORE NEWS

更多资讯

📰

Spring Boot 实战:流浪宠物管理系统开发与部署全流程

简介:基于 Spring Boot 的 Java Web 流浪宠物管理系统毕业设计资料包,面向高校毕业设计学生、Java Web 初学者及流浪宠物救助站工作人员。系统覆盖宠物档案、救助进度、志愿者信息等核心模块,实现宠物信息录入、查询、统计与分析,…

📰

GD25Q80E实战:从SPI时序到STM32 QSPI外设完整指南

每次有同学拿着开发板跑来问“我想外挂一颗Flash,GD25Q80E和W25Q16选哪个”,我都会先反问一句:你打算让它存什么?字库、固件、参数还是日志?别看SPI NOR Flash的命令表翻来覆去就那么十几条,很多人折腾一整…

📰

五层级领导力实战:从职位权力到价值观感召

1. 领导力层级的本质解析领导力并非与生俱来的天赋,而是一种可以通过系统学习和实践不断提升的能力。在我十五年的团队管理实践中,深刻体会到领导力的提升就像攀登一座五层高塔,每一层都需要不同的技能和心态转变。最基础的领导力来自职位赋予…

📰

SpringBoot+Vue城中村流动人口管理系统设计与实践

1. 项目背景与需求分析城中村流动人口管理一直是基层治理的难点痛点。以松北村为例,这个典型的城乡结合部聚集了超过2万名外来务工人员,但房东们还在用纸质本子记录租客信息,村委会掌握的数据往往滞后3-6个月。去年疫情期间,光是排…

📰

LTE附着被ESM cause#19拒绝?从信令原理到现场排查实战

前几天一个项目现场的群里炸了锅:用户投诉4G信号满格,但刷不了视频、微信只能收个“正在连接”,VoLTE也注册不上。后台工程师拉指标一看,MME的Attach Reject次数蹭蹭涨,按Cause值一分类,排第一的就是cause#…

📰

React Native与HarmonyOS跨平台弹性动画优化实践

1. 项目概述:当React Native遇上HarmonyOS去年在重构一个运动健康类App时,我们遇到了一个典型的多端适配难题:如何在HarmonyOS和Android/iOS上实现完全一致的弹性动画效果?传统的React Native动画方案在HarmonyOS上表现不稳定&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬