Apache Shiro 安装指南

Apache Shiro 2.2.1 安装指南:在 Ubuntu 22.04 上准备 JDK 17 与 Maven 环境,查询 Maven Central 完成版本选型,通过 pom 依赖引入 shiro-core 并核查依赖树,用 IniSecurityManagerFactory 加载 shiro.ini 完成登录验证,覆盖 jar 直用、堆内存限制、缺类排障、常见问题与卸载方式,全程实测。

Apache ShiroApache Shiro2026/10/12

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.x1.13.0旧版本线,社区维护重心已迁移存量 1.x 工程维护
2.x2.2.1当前稳定主线,JDK 17 实测可用新工程推荐(本文选型)
3.x3.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] 段

九、注意事项

⚠️ 注意:

  1. IniSecurityManagerFactory 在 2.x 已标记过时(编译产生 deprecation 警告),入门验证仍可使用;工程化集成建议改用编程式装配 SecurityManager,或结合 Spring 集成方案。
  2. 首次编译需联网下载全部依赖(实测含下载总耗时 02:49 min);依赖入本地仓库后,增量编译为秒级(实测 1.764 s)。
  3. shiro.ini 中的 root/admin/alice 与口令 q1w2e3r4 仅为本地演示凭据;生产系统必须更换口令并使用加密凭据匹配(如 HashedCredentialsMatcher)存储口令散列。
  4. 升级 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/