Ubuntu 22.04 安装 jcasbin 1.99.0 指南
Ubuntu 22.04 安装 jcasbin 1.99.0 实测指南:apt 安装 OpenJDK 11/8 与 Maven 3.6.3、Maven 依赖树与手动 jar 两种引入方式、JDK 8 字节码核验、ACL 全链路最小验证。
Ubuntu 22.04 安装 jcasbin 1.99.0 指南
目标:在 Ubuntu 22.04 上完成 jcasbin(Apache Casbin 的 Java 实现源生库)的安装与最小可用验证——覆盖 OpenJDK 11/8 与 Maven 的安装核验、Maven 依赖树、手动 jar 直跑、ACL 模型全链路验证,全部命令已在 Ubuntu 22.04.5 LTS(OpenJDK 11.0.32.1、Maven 3.6.3)实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(jammy),x86_64
- JDK:OpenJDK 11.0.32.1(系统默认)/ OpenJDK 1.8.0_504(可选,用于验证 Java 8 兼容)
- 构建工具:Apache Maven 3.6.3
- 组件版本:jcasbin 1.99.0(Maven Central 最新稳定版,字节码 major 52 = Java 8)
- 实验目录:
/root/casbin-demo(Maven 工程) - 执行用户:root
Casbin 是多语言授权框架,Java 生态的发行物是 org.casbin:jcasbin,本篇所有"安装"即围绕该库展开。
二、前置条件
JDK 与 Maven 核验(本环境已预装):
java -version && mvn -version | head -3
回显(实测):
openjdk version "11.0.32.1" 2026-08-18
OpenJDK Runtime Environment (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu, mixed mode, sharing)
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.32.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
未预装时安装:
apt-get update && apt-get install -y openjdk-11-jdk maven
如需额外安装 JDK 8 做兼容验证:
apt-get install -y openjdk-8-jdk
实测注意:部分环境安装 openjdk-8-jdk 会报
update-alternatives: error creating symbolic link '/usr/share/binfmts/jar.dpkg-tmp': No such file or directory,先mkdir -p /usr/share/binfmts && dpkg --configure -a再重装即可。
systemd 环境正常性核验(可选):systemctl is-system-running 回显 running。
三、方式一:Maven 引入(推荐)
工程 pom.xml 关键部分:
<dependencies>
<dependency>
<groupId>org.casbin</groupId>
<artifactId>jcasbin</artifactId>
<version>1.99.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.16</version>
</dependency>
</dependencies>
参数说明:坐标固定为 org.casbin:jcasbin;slf4j-simple 为可选日志实现,必须用 2.x 系(搭配 1.7.x 会输出绑定告警)。编译核验:
cd /root/casbin-demo && mvn clean compile
回显(实测):
[INFO] BUILD SUCCESS
[INFO] Total time: 3.723 s
依赖树(确认传递依赖构成):
cd /root/casbin-demo && mvn dependency:tree | sed -n '/maven-dependency-plugin/,/BUILD/p' | head -18
回显(实测):
[INFO] +- org.casbin:jcasbin:jar:1.99.0:compile
[INFO] | +- org.slf4j:slf4j-api:jar:2.0.16:compile
[INFO] | +- io.github.aviatorscript:aviator:jar:5.9.0:compile
[INFO] | +- com.github.seancfoley:ipaddress:jar:5.5.1:compile
[INFO] | +- commons-io:commons-io:jar:2.17.0:compile
[INFO] | +- org.apache.commons:commons-csv:jar:1.12.0:compile
[INFO] | | \- commons-codec:commons-codec:jar:1.17.1:compile
[INFO] | +- com.google.code.gson:gson:jar:2.11.0:compile
[INFO] | \- com.fasterxml.jackson.core:jackson-databind:jar:2.18.1:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.18.1:compile
[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.18.1:compile
[INFO] \- org.slf4j:slf4j-simple:jar:2.0.16:compile
关键传递依赖分工:aviator(匹配器表达式求值引擎)、commons-csv(策略 CSV 解析)、ipaddress(CIDR/IP 匹配)、slf4j-api(日志门面)、gson/jackson-databind(配置与适配器场景的 JSON 能力)。Gradle 写法:implementation 'org.casbin:jcasbin:1.99.0'。
四、方式二:手动 jar + javac/java 直跑
导出全量依赖 jar:
cd /root/casbin-demo && mvn dependency:copy-dependencies -DoutputDirectory=target/dependency && ls target/dependency | tr '\n' ' '; echo
回显(实测):
aviator-5.9.0.jar commons-codec-1.17.1.jar commons-csv-1.12.0.jar commons-io-2.17.0.jar error_prone_annotations-2.27.0.jar gson-2.11.0.jar ipaddress-5.5.1.jar jackson-annotations-2.18.1.jar jackson-core-2.18.1.jar jackson-databind-2.18.1.jar jcasbin-1.99.0.jar slf4j-api-2.0.16.jar slf4j-simple-2.0.16.jar
用 JDK 8 编译运行(验证 Java 8 兼容性):
cd /root/casbin-demo && /usr/lib/jvm/java-8-openjdk-amd64/bin/javac -encoding UTF-8 -cp 'target/dependency/*' -d target/classes8 src/main/java/demo/*.java && echo === JDK8 javac OK ===
回显(实测):
=== JDK8 javac OK ===
cd /root/casbin-demo && /usr/lib/jvm/java-8-openjdk-amd64/bin/java -cp 'target/classes8:target/dependency/*' demo.CasbinDemo | head -6
回显(实测):
alice, data1, read => true
alice, data1, write => false
bob, data2, write => true
bob, data2, read => false
[after addPolicy] alice, data2, write => true
--- policy list after addPolicy ---
五、字节码版本核验
确认 jcasbin 1.99.0 可运行的最低 JDK 版本:
javap -verbose -cp ~/.m2/repository/org/casbin/jcasbin/1.99.0/jcasbin-1.99.0.jar org.casbin.jcasbin.main.Enforcer | grep major
回显(实测):
major version: 52
major 52 = Java 8,即 JDK 8+ 均可运行;Ubuntu 22.04 默认的 JDK 11 直接可用,上一节的 JDK 8 编译运行结果也印证了这一点。
六、最小验证:ACL 模型全链路
工程根目录两个文件。模型 model.conf:
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
策略 policy.csv:
p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
验证类 demo.CasbinDemo 关键代码:
Enforcer e = new Enforcer("model.conf", "policy.csv");
System.out.println("alice, data1, read => " + e.enforce("alice", "data1", "read"));
System.out.println("alice, data1, write => " + e.enforce("alice", "data1", "write"));
e.addPolicy("alice", "data2", "write");
System.out.println("[after addPolicy] alice, data2, write => " + e.enforce("alice", "data2", "write"));
e.removeFilteredPolicy(0, "alice", "data2");
e.savePolicy();
System.out.println("savePolicy done");
运行:
cd /root/casbin-demo && mvn -q exec:java -Dexec.mainClass=demo.CasbinDemo
回显(实测,程序输出部分):
alice, data1, read => true
alice, data1, write => false
bob, data2, write => true
bob, data2, read => false
[after addPolicy] alice, data2, write => true
--- policy list after addPolicy ---
[alice, data1, read]
[bob, data2, write]
[data2_admin, data2, read]
[data2_admin, data2, write]
[alice, data2, write]
removeFilteredPolicy(0, alice, data2) => true
[after remove] alice, data2, write => false
savePolicy done
决策(enforce)、运行期增删(addPolicy/removeFilteredPolicy)、文件回写(savePolicy)三步全通,安装完成。
七、注意事项
- jcasbin 非单 jar 库:手动部署需导出全部 13 个依赖 jar(第四节清单),只拷主 jar 会立刻 NoClassDefFoundError。
- slf4j 实现绑定 2.x:与 jcasbin 内置 slf4j-api 2.0.16 配套;1.7.x 实现有兼容告警。
- JDK 8+ 即可运行(major 52),Ubuntu 22.04 默认 JDK 11 无需任何调整。
- FileAdapter 用工作目录相对路径读写策略文件,
savePolicy()要求目标文件已存在;示例须从工程根目录运行。 - 默认 autoSave 开启,addPolicy/removePolicy 即时写回策略文件,重复演示前先还原 policy.csv。
- exec-maven-plugin 若在 pom 中固定 mainClass,命令行
-Dexec.mainClass会被覆盖——pom 里不要写死 mainClass,便于多演示类切换。
八、参考链接
- jcasbin 官方仓库:https://github.com/casbin/jcasbin
- Casbin 官网(模型/文档):https://casbin.org/zh/
- Maven 中央仓库 jcasbin:https://mvnrepository.com/artifact/org.casbin/jcasbin
- Ubuntu OpenJDK 软件包:https://packages.ubuntu.com/jammy/openjdk-11-jdk
- Casbin 编辑器(在线验证模型):https://editor.casbin.org/