spring-boot 3.x 配置 shiro 缺失 Jakarta 支持

103 阅读1分钟

在Spring Boot 3.x中,由于其已迁移至Jakarta EE 9+(包名从javax.servlet变更为jakarta.servlet),而shiro-spring-boot-web-starter的部分依赖仍引用旧版javax.servlet,所以会有兼容问题运行报错,解决方法参照了jeecg-boot和ai,在pom.xml中,排除shiro-spring-boot-web-starter中传递的旧版javax.servlet依赖,并显式引入Jakarta兼容的Shiro模块

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <shiro.version>2.0.6</shiro.version>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <!--shiro-->
  <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring-boot-starter</artifactId>
    <classifier>jakarta</classifier>
    <version>${shiro.version}</version>
    <exclusions>
      <exclusion>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <classifier>jakarta</classifier>
    <version>${shiro.version}</version>
    <!-- 排除仍使用了javax.servlet的依赖 -->
    <exclusions>
      <exclusion>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
      </exclusion>
      <exclusion>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-web</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <!-- 引入适配jakarta的依赖包 -->
  <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <classifier>jakarta</classifier>
    <version>${shiro.version}</version>
    <exclusions>
      <exclusion>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-web</artifactId>
    <classifier>jakarta</classifier>
    <version>${shiro.version}</version>
    <exclusions>
      <exclusion>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
</dependencies>