CentOS 8 安装 jcasbin 1.99.0 指南

CentOS 8 安装 jcasbin 1.99.0 实测指南:EOL 后切换 vault 源、dnf 安装 OpenJDK 8 与 Maven 3.5.4、Maven 引入与手动 jar 两种方式、ACL 模型最小验证全链路跑通。

Apache CasbinCasbin2026/10/13

CentOS 8 安装 jcasbin 1.99.0 指南

目标:在 CentOS 8 上完成 jcasbin(Apache Casbin 的 Java 实现源生库)的安装与最小可用验证——覆盖 EOL 后的 yum 源处理、OpenJDK 8 与 Maven 安装、Maven 与手动 jar 两种引入方式、ACL 模型全链路验证,全部命令已在 CentOS Linux 8(8.5.2111)实测通过。

一、环境信息

  • 操作系统:CentOS Linux 8(8.5.2111),x86_64
  • JDK:OpenJDK 1.8.0_312(java-1.8.0-openjdk-devel)
  • 构建工具:Apache Maven 3.5.4(Red Hat 3.5.4-5)
  • 组件版本:jcasbin 1.99.0(Maven Central 最新稳定版,字节码 major 52 = Java 8,JDK 8+ 均可运行)
  • 实验目录:/root/casbin-demo(Maven 工程)
  • 执行用户:root

说明:Casbin 是多语言授权框架,Java 生态的发行物是 org.casbin:jcasbin,本篇所有"安装"即围绕该库展开。

二、前置条件与 yum 源准备

CentOS 8 已于 2021-12-31 停止维护(EOL),官方镜像源下线,系统必须指向 vault 归档源。先确认系统版本与源状态:

cat /etc/os-release | head -2 && grep -h baseurl /etc/yum.repos.d/CentOS-Linux-*.repo | head -2

回显(实测):

NAME="CentOS Linux"
VERSION="8"
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/8.5.2111/AppStream/x86_64/os/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/8.5.2111/BaseOS/x86_64/os/

若源仍指向 mirror.centos.org(已失效),切换为 vault 源:

sed -i -e 's|mirrorlist=|#mirrorlist=|g' \
       -e 's|#baseurl=http://mirror.centos.org|baseurl=https://vault.centos.org|g' \
       /etc/yum.repos.d/CentOS-Linux-*.repo

刷新缓存:

dnf makecache

三、安装 JDK 8 与 Maven

一条命令同时安装 JDK 8 开发包与 Maven:

dnf install -y java-1.8.0-openjdk-devel maven

回显(实测,节选):

Installed:
  java-1.8.0-openjdk-headless-1:1.8.0_312.b07-2.el8_5.x86_64
  java-1.8.0-openjdk-devel-1:1.8.0_312.b07-2.el8_5.x86_64
  maven-1:3.5.4-5.module_el8.5.0+xxx.noarch
  ...
Complete!

版本核验:

java -version && javac -version && mvn -version | head -3

回显(实测):

openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
javac 1.8.0_312
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 1.8.0_312, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre

jcasbin 1.99.0 的字节码为 Java 8(major 52),本套环境(JDK 8 + Maven 3.5.4)即满足要求;如需 JDK 11:dnf install -y java-11-openjdk-devel,并用 alternatives --config java 切换默认 JVM。

四、方式一: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(Maven 中央仓库);slf4j-simple 是可选的日志实现,用于在控制台看到 Casbin 的决策日志。注意绑定 slf4j 2.x:jcasbin 1.99.0 自带 slf4j-api 2.0.16,若搭配 1.7.x 的实现会输出绑定告警。

首次编译自动下载依赖到本地仓库:

cd /root/casbin-demo && mvn -q 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

可以看到 jcasbin 不是"单 jar 零依赖"的库:表达式求值(aviator)、策略 CSV 解析(commons-csv)、CIDR 匹配(ipaddress)、日志门面(slf4j)等都是必备传递依赖,共 13 个 jar。Gradle 工程对应写法 implementation 'org.casbin:jcasbin:1.99.0',坐标一致。

五、方式二:手动 jar + javac/java 直跑

用第四节的 dependency:copy-dependencies 导出全部依赖 jar 后,可直接用 javac/java(无需 Maven 参与):

cd /root/casbin-demo && mkdir -p target/classes8 && 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 && java -cp "target/classes8:target/dependency/*" demo.CasbinDemo | head -6

回显(实测,前半为 Casbin 自带决策日志,后半为程序输出):

[main] INFO org.casbin.jcasbin - Request: [alice, data1, read] ---> true
[main] INFO org.casbin.jcasbin - Request: [alice, data1, write] ---> false
[main] INFO org.casbin.jcasbin - Request: [bob, data2, write] ---> true
[main] INFO org.casbin.jcasbin - Request: [bob, data2, read] ---> false
alice, data1, read => true
alice, data1, write => false
bob, data2, write => true
bob, data2, read => false
[after addPolicy] alice, data2, write => true

六、最小验证: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

验证类关键代码:

import org.casbin.jcasbin.main.Enforcer;

public class CasbinDemo {
    public static void main(String[] args) {
        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();                                       // 回写策略文件
    }
}

运行:

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() 返回 boolean 即授权决策;addPolicy/removePolicy/savePolicy 三步验证了策略的运行期管理与文件回写,整条链路在 CentOS 8 上全部打通。

七、版本核对(Maven Central)

安装前可核对中央仓库元数据,确认所用版本确为最新稳定版:

curl -s https://repo1.maven.org/maven2/org/casbin/jcasbin/maven-metadata.xml | grep -E '<latest>|<release>' ; curl -s https://repo1.maven.org/maven2/org/casbin/jcasbin/maven-metadata.xml | grep '<version>' | tail -5

回显(实测):

    <latest>1.100.0-snapshot.3</latest>
    <release>1.100.0-snapshot.3</release>
      <version>1.97.0</version>
      <version>1.98.0</version>
      <version>1.99.0</version>
      <version>1.100.0-snapshot.1</version>
      <version>1.100.0-snapshot.2</version>
      <version>1.100.0-snapshot.3</version>

<latest> 指向的 1.100.0-snapshot.x 是快照版本,不是稳定版;当前最新稳定版为 1.99.0,即本篇安装目标。

八、注意事项

  • yum 源必须指向 vault:CentOS 8 EOL 后 mirror.centos.org 已下线,不改源 dnf install 会全部报 404。
  • jcasbin 依赖不可裁剪到只剩主 jar:aviator/commons-csv/slf4j-api 等是运行必需,手动部署按第五节导出全量 jar。
  • slf4j 实现用 2.x:搭配 1.7.x 绑定会告警 "Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier"。
  • JDK 8 即可:字节码 major 52;无需 JDK 17/11。Maven 用发行包自带的 3.5.4 足够。
  • FileAdapter 按工作目录相对路径读写策略文件,且 savePolicy() 要求文件已存在——从工程根目录运行示例最稳。
  • 默认 autoSave 开启:addPolicy/removePolicy 会即时写回策略文件,重复演示前先还原 policy.csv。

九、参考链接

  1. jcasbin 官方仓库:https://github.com/casbin/jcasbin
  2. Casbin 官网(模型/文档):https://casbin.org/zh/
  3. Maven 中央仓库 jcasbin:https://mvnrepository.com/artifact/org.casbin/jcasbin
  4. CentOS Vault 官方归档:https://vault.centos.org/
  5. Casbin 编辑器(在线验证模型):https://editor.casbin.org/