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 全链路最小验证。

Apache CasbinCasbin2026/10/13

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,便于多演示类切换。

八、参考链接

  1. jcasbin 官方仓库:https://github.com/casbin/jcasbin
  2. Casbin 官网(模型/文档):https://casbin.org/zh/
  3. Maven 中央仓库 jcasbin:https://mvnrepository.com/artifact/org.casbin/jcasbin
  4. Ubuntu OpenJDK 软件包:https://packages.ubuntu.com/jammy/openjdk-11-jdk
  5. Casbin 编辑器(在线验证模型):https://editor.casbin.org/