Apache Shiro 安装指南
Apache Shiro 2.2.1 安装指南:在 Ubuntu 22.04 上准备 JDK 17 与 Maven 环境,查询 Maven Central 完成版本选型,通过 pom 依赖引入 shiro-core 并核查依赖树,用 IniSecurityManagerFactory 加载 shiro.ini 完成登录验证,覆盖 jar 直用、堆内存限制、缺类排障、常见问题与卸载方式,全程实测。
Apache Shiro 安装指南
目标:在 Ubuntu 22.04 服务器上完成 Apache Shiro 2.2.1(Java 安全框架,以 jar 库形态提供,非独立服务)的引入与验证。本文给出 JDK 17 与 Maven 环境准备、Maven Central 版本选型、Maven 依赖引入与「直接使用 jar 包」两种方案,以及 IniSecurityManagerFactory 登录验证、JVM 堆内存限制、缺类排障与卸载方式。所有命令与回显均在 Ubuntu 22.04.5 + OpenJDK 17 环境实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(Jammy Jellyfish)
- 架构:x86_64(内核 6.8.0-138-generic)
- Java:OpenJDK 17.0.20.1(
openjdk-17-jdk,Ubuntu 官方源) - 构建工具:Apache Maven 3.6.3(Ubuntu 官方源)
- Shiro 版本:2.2.1(2.x 版本线最新稳定版)
- 日志实现:slf4j-simple 2.0.16 + jcl-over-slf4j 2.0.16
- 演示账号:root / admin / alice(密码统一 q1w2e3r4,仅用于本地验证)
- 验证工程目录:
/root/shiro-install-check/
💡 说明:Apache Shiro 是 Java 安全框架(认证、授权、加密、会话管理),发布为 jar 库(
org.apache.shiro.*),本身没有守护进程或服务端口。所谓「安装」本质是准备好 JDK/构建环境,并把 shiro-core 以依赖或 classpath 方式引入到你的 Java 工程。
二、前置条件
2.1 更新软件源
apt-get update -qq
2.2 安装 JDK 17 与 Maven
apt-get install -y -qq openjdk-17-jdk maven
2.3 验证安装
java -version
实测回显:
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)
mvn -version
实测回显:
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 17.0.20.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-17-openjdk-amd64
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "6.8.0-138-generic", arch: "amd64", family: "unix"
apt-cache policy openjdk-17-jdk maven
实测回显:
openjdk-17-jdk:
Installed: 17.0.20.1+1-1~22.04
--
maven:
Installed: 3.6.3-5
⚠️ 注意:
mvn -version中Java version必须与目标 JDK 一致,Maven 才会用该 JDK 编译运行工程。
三、版本选型说明
3.1 查询 Maven Central 最新版本
curl -s https://repo1.maven.org/maven2/org/apache/shiro/shiro-core/maven-metadata.xml | grep -E "latest|release|lastUpdated"
实测回显:
<latest>3.0.1</latest>
<release>3.0.1</release>
<lastUpdated>20260827151940</lastUpdated>
3.2 版本线对照与选型结论
Maven Central 上 shiro-core 的版本线对照(列表取自 maven-metadata.xml 的 versions 段):
| 版本线 | 最新稳定版 | 特点 | 适用建议 |
|---|---|---|---|
| 1.x | 1.13.0 | 旧版本线,社区维护重心已迁移 | 存量 1.x 工程维护 |
| 2.x | 2.2.1 | 当前稳定主线,JDK 17 实测可用 | 新工程推荐(本文选型) |
| 3.x | 3.0.1 | 最新发布主线 | 追求最新特性时评估 |
结论:本文全程按 shiro-core 2.2.1 实测。
四、方案 A:Maven 项目依赖引入(官方推荐)
4.1 创建工程目录与结构
mkdir -p /root/shiro-install-check/src/main/java/demo /root/shiro-install-check/src/main/resources
cd /root/shiro-install-check
创建完成后工程结构如下(find . -type f | sort 实测回显):
./pom.xml
./src/main/java/demo/LoginDemo.java
./src/main/resources/shiro.ini
4.2 编写 pom.xml
创建 /root/shiro-install-check/pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>shiro-install-check</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>2.2.1</version>
<exclusions>
<!-- shiro-core 2.x 依赖树中的 log4j2 绑定,改用轻量 slf4j-simple 输出日志 -->
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.16</version>
</dependency>
<!-- shiro-config-ogdl 依赖 commons-beanutils,1.11.0 不再传递 commons-logging,
桥接 jcl-over-slf4j 补齐 org.apache.commons.logging.LogFactory -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>2.0.16</version>
</dependency>
</dependencies>
</project>
4.3 编写 shiro.ini
创建 /root/shiro-install-check/src/main/resources/shiro.ini:
[main]
# IniSecurityManagerFactory 解析本文件时,依据 [users]/[roles] 隐式构建 IniRealm 并挂到 SecurityManager
[users]
root = q1w2e3r4, admin
admin = q1w2e3r4, user, deployer
alice = q1w2e3r4, user
[roles]
admin = *
user = app:read, app:write
deployer = app:deploy
4.4 编写最小验证程序
创建 /root/shiro-install-check/src/main/java/demo/LoginDemo.java:
package demo;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.ini.IniSecurityManagerFactory;
import org.apache.shiro.lang.util.Factory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 最小验证程序:加载 shiro.ini,root 账号登录成功,并演示 Session 基本读写。
*/
public class LoginDemo {
private static final Logger log = LoggerFactory.getLogger(LoginDemo.class);
public static void main(String[] args) {
// 1. 从 classpath:shiro.ini 构建 SecurityManager
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
// 2. 获取当前 Subject 并登录
Subject currentUser = SecurityUtils.getSubject();
log.info("before login, isAuthenticated = {}", currentUser.isAuthenticated());
UsernamePasswordToken token = new UsernamePasswordToken("root", "q1w2e3r4");
currentUser.login(token);
log.info("after login, isAuthenticated = {}", currentUser.isAuthenticated());
log.info("principal = {}", currentUser.getPrincipal());
log.info("hasRole(admin) = {}", currentUser.hasRole("admin"));
// 3. Session 读写
Session session = currentUser.getSession();
session.setAttribute("loginUser", currentUser.getPrincipal());
log.info("session attribute loginUser = {}", session.getAttribute("loginUser"));
log.info("sessionId = {}, host = {}", session.getId(), session.getHost());
// 4. 退出登录
currentUser.logout();
log.info("after logout, isAuthenticated = {}", currentUser.isAuthenticated());
}
}
4.5 首次编译
cd /root/shiro-install-check && mvn compile
实测回显(末段;首次编译另含依赖下载日志,耗时约 3 分钟):
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ shiro-install-check ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /root/shiro-install-check/target/classes
[WARNING] /root/shiro-install-check/src/main/java/demo/LoginDemo.java: /root/shiro-install-check/src/main/java/demo/LoginDemo.java uses or overrides a deprecated API.
[WARNING] /root/shiro-install-check/src/main/java/demo/LoginDemo.java: Recompile with -Xlint:deprecation for details.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.764 s
[INFO] Finished at: 2026-10-12T12:00:38Z
[INFO] ------------------------------------------------------------------------
⚠️ 注意:
deprecated API警告来自IniSecurityManagerFactory(2.x 已标记过时),不影响编译与运行,详见「十、常见问题」Q2。
4.6 依赖树核查
cd /root/shiro-install-check && mvn dependency:tree
实测回显:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ shiro-install-check ---
[INFO] demo:shiro-install-check:jar:1.0.0
[INFO] +- org.apache.shiro:shiro-core:jar:2.2.1:compile
[INFO] | +- org.apache.shiro:shiro-lang:jar:2.2.1:compile
[INFO] | +- org.apache.shiro:shiro-cache:jar:2.2.1:compile
[INFO] | +- org.apache.shiro:shiro-crypto-hash:jar:2.2.1:compile
[INFO] | | +- org.apache.shiro:shiro-crypto-core:jar:2.2.1:compile
[INFO] | | \- org.bouncycastle:bcprov-jdk18on:jar:1.84:compile
[INFO] | +- org.apache.shiro.crypto:shiro-hashes-argon2:jar:2.2.1:runtime
[INFO] | +- org.apache.shiro.crypto:shiro-hashes-bcrypt:jar:2.2.1:runtime
[INFO] | +- org.apache.shiro:shiro-crypto-cipher:jar:2.2.1:compile
[INFO] | +- org.apache.shiro:shiro-config-core:jar:2.2.1:compile
[INFO] | +- org.apache.shiro:shiro-config-ogdl:jar:2.2.1:compile
[INFO] | | \- commons-beanutils:commons-beanutils:jar:1.11.0:compile
[INFO] | | \- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] | \- org.apache.shiro:shiro-event:jar:2.2.1:compile
[INFO] +- org.slf4j:slf4j-simple:jar:2.0.16:compile
[INFO] | \- org.slf4j:slf4j-api:jar:2.0.16:compile
[INFO] \- org.slf4j:jcl-over-slf4j:jar:2.0.16:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
💡 说明:shiro-core 2.2.1 会传递引入 shiro-lang、shiro-cache、shiro-crypto-、shiro-config-、shiro-event 与 commons-beanutils 等模块;其中 shiro-config-ogdl → commons-beanutils 1.11.0 不再传递 commons-logging,因此 pom 中必须补
jcl-over-slf4j桥接(见「十、常见问题」Q1)。
五、安装验证:IniSecurityManagerFactory 加载登录
5.1 运行最小验证程序
cd /root/shiro-install-check && mvn exec:java -Dexec.mainClass=demo.LoginDemo
实测回显(应用段与构建结果):
[demo.LoginDemo.main()] INFO demo.LoginDemo - before login, isAuthenticated = false
[demo.LoginDemo.main()] INFO org.apache.shiro.session.mgt.AbstractValidatingSessionManager - Enabling session validation scheduler...
[demo.LoginDemo.main()] INFO demo.LoginDemo - after login, isAuthenticated = true
[demo.LoginDemo.main()] INFO demo.LoginDemo - principal = root
[demo.LoginDemo.main()] INFO demo.LoginDemo - hasRole(admin) = true
[demo.LoginDemo.main()] INFO demo.LoginDemo - session attribute loginUser = root
[demo.LoginDemo.main()] INFO demo.LoginDemo - sessionId = 3f6e8c7c-94ff-4594-acf3-62e7070d93c3, host = null
[demo.LoginDemo.main()] INFO demo.LoginDemo - after logout, isAuthenticated = false
[INFO] BUILD SUCCESS
[INFO] Total time: 15.623 s
5.2 结果解读
isAuthenticated = true:IniSecurityManagerFactory 成功加载classpath:shiro.ini并完成 root 账号认证,安装引入生效。principal = root:登录主体为 shiro.ini[users]段中的账号名。hasRole(admin) = true:root 账号具备[roles]段定义的 admin 角色。sessionId为随机 UUID,每次运行不同,属正常现象。after logout, isAuthenticated = false:logout() 后会话与身份状态已清理。
⚠️ 注意:
mvn exec:java方式下,logout() 后会话校验线程(SessionValidationThread-1)不会立即退出,末尾可能出现线程残留警告或线程组销毁提示,均不影响功能;用 java -cp 直接运行无此现象(见六、方案 B)。
六、方案 B:直接使用 jar 包(java -cp)
6.1 生成依赖 classpath 清单
shiro-core 2.2.1 连同日志桥接共 17 个 jar,用 dependency:build-classpath 一次性生成清单:
cd /root/shiro-install-check
mvn -q dependency:build-classpath -Dmdep.outputFile=/tmp/cp-ic.txt
cat /tmp/cp-ic.txt
清单内容(实测输出,每行一个 jar):
/root/.m2/repository/org/apache/shiro/shiro-core/2.2.1/shiro-core-2.2.1.jar
/root/.m2/repository/org/apache/shiro/shiro-lang/2.2.1/shiro-lang-2.2.1.jar
/root/.m2/repository/org/apache/shiro/shiro-cache/2.2.1/shiro-cache-2.2.1.jar
/root/.m2/repository/org/apache/shiro/shiro-crypto-hash/2.2.1/shiro-crypto-hash-2.2.1.jar
/root/.m2/repository/org/apache/shiro/shiro-crypto-core/2.2.1/shiro-crypto-core-2.2.1.jar
/root/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.84/bcprov-jdk18on-1.84.jar
/root/.m2/repository/org/apache/shiro/crypto/shiro-hashes-argon2/2.2.1/shiro-hashes-argon2-2.2.1.jar
/root/.m2/repository/org/apache/shiro/crypto/shiro-hashes-bcrypt/2.2.1/shiro-hashes-bcrypt-2.2.1.jar
/root/.m2/repository/org/apache/shiro/shiro-crypto-cipher/2.2.1/shiro-crypto-cipher-2.2.1.jar
/root/.m2/repository/org/apache/shiro/shiro-config-core/2.2.1/shiro-config-core-2.2.1.jar
/root/.m2/repository/org/apache/shiro/shiro-config-ogdl/2.2.1/shiro-config-ogdl-2.2.1.jar
/root/.m2/repository/commons-beanutils/commons-beanutils/1.11.0/commons-beanutils-1.11.0.jar
/root/.m2/repository/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar
/root/.m2/repository/org/apache/shiro/shiro-event/2.2.1/shiro-event-2.2.1.jar
/root/.m2/repository/org/slf4j/slf4j-simple/2.0.16/slf4j-simple-2.0.16.jar
/root/.m2/repository/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar
/root/.m2/repository/org/slf4j/jcl-over-slf4j/2.0.16/jcl-over-slf4j-2.0.16.jar
💡 说明:离线环境可按清单中的坐标(groupId/artifactId/version)从 Maven Central 预先下载同一组 jar 放入自定义目录(如
/opt/shiro/lib),再以java -cp "classes目录:/opt/shiro/lib/*"方式运行。
6.2 javac 编译与 classpath 运行
cd /root/shiro-install-check
rm -rf target && mkdir -p target/classes
javac -encoding UTF-8 -cp "$(cat /tmp/cp-ic.txt)" -d target/classes src/main/java/demo/LoginDemo.java
编译输出两条 Note(deprecated API 提示,同 4.5 的 WARNING)。
⚠️ 必须把 shiro.ini 放到 classpath 上(Maven 工程会自动拷贝资源,手工编译需自行复制):
cp src/main/resources/shiro.ini target/classes/
java -cp "target/classes:$(cat /tmp/cp-ic.txt)" demo.LoginDemo
实测回显(线程名为 [main]):
[main] INFO demo.LoginDemo - before login, isAuthenticated = false
[main] INFO org.apache.shiro.session.mgt.AbstractValidatingSessionManager - Enabling session validation scheduler...
[main] INFO demo.LoginDemo - after login, isAuthenticated = true
[main] INFO demo.LoginDemo - principal = root
[main] INFO demo.LoginDemo - hasRole(admin) = true
[main] INFO demo.LoginDemo - session attribute loginUser = root
[main] INFO demo.LoginDemo - sessionId = f789ea26-c85b-4cab-b0fd-3a4ee85447b3, host = null
[main] INFO demo.LoginDemo - after logout, isAuthenticated = false
七、多方案对照与选择建议
| 维度 | 方案 A:Maven 依赖引入 | 方案 B:直接使用 jar |
|---|---|---|
| 版本管理 | pom 锁定 2.2.1,传递依赖自动解析 | 需手工维护 17 个 jar 及版本 |
| 是否需联网 | 首次构建需访问 Maven Central | 下载 jar 需联网一次,之后可离线 |
| 升级方式 | 改 pom 版本号重新构建 | 逐个替换 jar |
| 适用场景 | 常规 Java 工程的推荐方式 | 无构建工具的离线环境、快速验证 |
选择建议:常规工程一律选方案 A;内网隔离环境用方案 B 预先备齐 jar,再按 6.2 的 classpath 方式编译运行。
八、配置说明
8.1 JVM 堆内存限制(256–512MB)
演示与生产均建议把 Java 进程堆限制在 256–512MB。通过 MAVEN_OPTS 注入后运行:
cd /root/shiro-install-check
MAVEN_OPTS="-Xms256m -Xmx512m" mvn exec:java -Dexec.mainClass=demo.LoginDemo
验证 JVM 参数真实生效(-XX:+PrintFlagsFinal 实测回显):
java -Xms256m -Xmx512m -XX:+PrintFlagsFinal -version 2>/dev/null | grep -iE "InitialHeapSize|MaxHeapSize"
size_t InitialHeapSize = 268435456 {product} {command line}
size_t MaxHeapSize = 536870912 {product} {command line}
size_t SoftMaxHeapSize = 536870912 {manageable} {ergonomic}
运行期间另开终端用 jps -v 确认 Maven Launcher 进程已带堆参数(实测回显):
jps -v | grep -iE "xms|xmx"
7512 Launcher -Xms256m -Xmx512m -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dmaven.home=/usr/share/maven -Dlibrary.jansi.path=/usr/share/maven/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/root/shiro-install-check
7567 Jps -Dapplication.home=/usr/lib/jvm/java-17-openjdk-amd64 -Xms8m -Djdk.module.main=jdk.jcmd
8.2 日志绑定
slf4j-simple:轻量日志实现,把 Shiro 与示例程序的日志以简单格式输出到标准错误流。jcl-over-slf4j:桥接 commons-logging。shiro-core 2.2.1 依赖树中的 commons-beanutils 1.11.0 不再传递 commons-logging,缺失时运行直接报 NoClassDefFoundError(见「十、常见问题」Q1)。- pom 中对 shiro-core 排除了
log4j-slf4j2-impl,避免引入 log4j2 全家桶。
8.3 安装相关配置汇总
| 配置项 | 位置/取值 |
|---|---|
| JDK 安装位置 | /usr/lib/jvm/java-17-openjdk-amd64 |
| Maven 安装位置 | /usr/share/maven |
| Maven 本地仓库 | ~/.m2/repository |
| Shiro 版本 | pom.xml 中 shiro-core 2.2.1 |
| 演示账号与角色 | src/main/resources/shiro.ini 的 [users]/[roles] 段 |
九、注意事项
⚠️ 注意:
IniSecurityManagerFactory在 2.x 已标记过时(编译产生 deprecation 警告),入门验证仍可使用;工程化集成建议改用编程式装配 SecurityManager,或结合 Spring 集成方案。- 首次编译需联网下载全部依赖(实测含下载总耗时 02:49 min);依赖入本地仓库后,增量编译为秒级(实测 1.764 s)。
- shiro.ini 中的 root/admin/alice 与口令 q1w2e3r4 仅为本地演示凭据;生产系统必须更换口令并使用加密凭据匹配(如 HashedCredentialsMatcher)存储口令散列。
- 升级 Shiro 版本时保持整棵依赖树同版本(本文以 2.2.1 为准),避免模块混版导致运行时异常。
十、常见问题
Q1:运行报 NoClassDefFoundError: org/apache/commons/logging/LogFactory?
实测报错(从 pom 中临时移除 jcl-over-slf4j 后复现,exec-maven-plugin 3.6.4):
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.beanutils.ConvertUtilsBean.<init> (ConvertUtilsBean.java:154)
at org.apache.shiro.config.ogdl.ReflectionBuilder$1.<init> (ReflectionBuilder.java:127)
at org.apache.shiro.config.ogdl.ReflectionBuilder.<init> (ReflectionBuilder.java:127)
at org.apache.shiro.config.ogdl.ReflectionBuilder.<init> (ReflectionBuilder.java:120)
at org.apache.shiro.ini.IniSecurityManagerFactory.<init> (IniSecurityManagerFactory.java:77)
at org.apache.shiro.ini.IniSecurityManagerFactory.<init> (IniSecurityManagerFactory.java:81)
at org.apache.shiro.ini.IniSecurityManagerFactory.<init> (IniSecurityManagerFactory.java:86)
at demo.LoginDemo.main (LoginDemo.java:22)
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.6.4:java (default-cli) on project shiro-install-check: An exception occurred while executing the Java class. org/apache/commons/logging/LogFactory: org.apache.commons.logging.LogFactory -> [Help 1]
原因:shiro-core 2.2.1 → shiro-config-ogdl → commons-beanutils 1.11.0 不再传递 commons-logging。解决:在 pom.xml 中补充以下依赖后重新编译运行即可:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>2.0.16</version>
</dependency>
Q2:编译出现 uses or overrides a deprecated API 警告?
来源是 IniSecurityManagerFactory(2.x 标记过时)。定位具体过时 API 可加编译参数复核(实测回显):
mvn clean compile -Dmaven.compiler.showDeprecation=true
[INFO] Compiling 1 source file to /root/shiro-install-check/target/classes
[WARNING] /root/shiro-install-check/src/main/java/demo/LoginDemo.java:[22,48] org.apache.shiro.ini.IniSecurityManagerFactory in org.apache.shiro.ini has been deprecated
[INFO] BUILD SUCCESS
[INFO] Total time: 1.563 s
警告不影响功能;如需消除,可改用编程式装配 SecurityManager 或升级集成方式。
Q3:mvn exec:java 结束后出现 SessionValidationThread 残留警告?
logout() 后会话校验线程不会立即退出,exec:java 会等待并打印线程残留 WARNING(见 5.1 说明)。改用 6.2 的 java -cp 方式直接运行则无此现象;该警告不影响功能。
Q4:方案 B 运行报 Resource [classpath:shiro.ini] could not be found?
classpath 方式运行时 shiro.ini 必须在 classpath 上。把 src/main/resources/shiro.ini 复制到 target/classes/(或把资源目录加入 -cp)后重试即可,见 6.2。
十一、卸载方式
移除验证工程与本地仓库中的 Shiro 相关 jar:
rm -rf /root/shiro-install-check
rm -rf ~/.m2/repository/org/apache/shiro
rm -rf ~/.m2/repository/org/slf4j
rm -rf ~/.m2/repository/org/bouncycastle/bcprov-jdk18on
rm -rf ~/.m2/repository/commons-beanutils ~/.m2/repository/commons-collections
若同时移除 JDK 17 与 Maven(确认服务器无其他 Java 工程依赖后再执行):
apt-get remove -y openjdk-17-jdk maven && apt-get autoremove -y
十二、参考链接
- Apache Shiro 官网:
https://shiro.apache.org/ - 10 分钟教程:
https://shiro.apache.org/10-minute-tutorial.html - 配置文档:
https://shiro.apache.org/configuration.html - Maven Central shiro-core:
https://repo1.maven.org/maven2/org/apache/shiro/shiro-core/