1. Sa-Token v1.34.0 更新概览

Sa-Token v1.34.0 版本的核心目标是实现对 SpringBoot3 的全面适配。作为 Java 生态中广受欢迎的权限认证框架,这次更新解决了 SpringBoot 大版本升级带来的兼容性问题。从技术实现来看,主要涉及以下几个方面的适配工作:

  1. 包路径调整:SpringBoot3 将 javax 包迁移到了 jakarta 包下
  2. 自动配置机制变更:SpringBoot3 对自动配置加载机制进行了优化
  3. 依赖管理调整:SpringBoot3 对 starter 的依赖管理方式有所改变

提示:升级前建议先检查项目中是否有直接依赖 javax 包的代码,这些都需要手动调整为 jakarta 包路径。

2. SpringBoot3 适配细节解析

2.1 包路径迁移方案

SpringBoot3 最大的变化就是从 javax.* 迁移到了 jakarta.* 命名空间。这对 Sa-Token 的影响主要体现在:

  1. Servlet API 相关接口:如 HttpServletRequest/Response
  2. JSR 标准注解:如 @PostConstruct、@PreDestroy
  3. 其他第三方依赖:如 validation-api

我们在适配过程中采用了条件编译的方式,通过 Maven 的 profiles 配置实现不同版本的兼容:

<profiles>
    <profile>
        <id>springboot2</id>
        <dependencies>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>springboot3</id>
        <dependencies>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
            </dependency>
        </dependencies>
    </profile>
</profiles>

2.2 自动配置机制调整

SpringBoot3 对自动配置机制做了以下优化:

  1. 移除了 spring.factories 自动发现机制
  2. 改用 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  3. 配置项前缀统一规范

Sa-Token 的自动配置类需要相应调整:

# 旧版配置方式
META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.dev33.satoken.spring.SaTokenAutoConfiguration

# 新版配置方式
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
cn.dev33.satoken.spring.SaTokenAutoConfiguration

3. 升级实操指南

3.1 环境准备

升级前需要确认以下环境条件:

  1. JDK 版本 ≥ 17(SpringBoot3 最低要求)
  2. Maven/Gradle 构建工具最新稳定版
  3. IDE 支持 Jakarta EE 9+ 规范

推荐使用以下版本组合:

  • SpringBoot 3.1.5
  • Sa-Token 1.34.0
  • JDK 17/21

3.2 具体升级步骤

  1. 修改 pom.xml 依赖:
<!-- 移除旧版依赖 -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.33.0</version>
</dependency>

<!-- 添加新版依赖 -->  
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot3-starter</artifactId>
    <version>1.34.0</version>
</dependency>
  1. 全局替换 javax 为 jakarta:

    • 在 IDE 中使用全局替换功能
    • 重点检查过滤器、拦截器相关代码
  2. 配置项检查:

    • 原有的 sa-token.* 配置前缀保持不变
    • 检查 redis 连接配置(如果使用redis集成)
  3. 测试验证:

    • 基础登录功能
    • 权限校验功能
    • Session操作
    • 踢人下线等高级功能

4. 常见问题解决方案

4.1 类找不到问题

报错示例:

java.lang.ClassNotFoundException: javax.servlet.Filter

解决方案:

  1. 确保使用了正确的 starter(sa-token-spring-boot3-starter)
  2. 检查依赖冲突,排除传递依赖中的 javax 包

4.2 自动配置不生效

可能原因:

  1. 配置文件位置不正确
  2. 包扫描路径未包含 Sa-Token 组件

排查步骤:

  1. 检查 META-INF/spring 目录结构
  2. 在启动类添加显式注解:
@Import({SaTokenAutoConfiguration.class})

4.3 Redis 集成异常

SpringBoot3 中 Lettuce 客户端有较大变化,建议:

  1. 使用最新版本的 spring-boot-starter-data-redis
  2. 检查连接池配置:
spring:
  redis:
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0

5. 升级后的性能优化

适配 SpringBoot3 后,可以结合新特性进行优化:

  1. 虚拟线程支持(JDK21+):
@Bean
public SaTokenConfig saTokenConfig() {
    SaTokenConfig config = new SaTokenConfig();
    config.setIsVirtualThread(true);
    return config;
}
  1. 响应式编程支持:
@Bean 
public SaReactorFilter saReactorFilter() {
    return new SaReactorFilter()
        .addInclude("/**")
        .setAuth(obj -> SaRouter.match("/**").check());
}
  1. AOT 编译优化:
  • 提前生成 native image
  • 减少运行时反射开销

6. 最佳实践建议

  1. 渐进式升级策略:

    • 先在新模块中使用 SpringBoot3
    • 逐步迁移老模块
    • 使用兼容层处理跨版本调用
  2. 监控指标集成:

@Bean
public MeterRegistryCustomizer<MeterRegistry> saTokenMetrics() {
    return registry -> {
        registry.gauge("sa_token.session.count", 
            SaManager.getSaTokenDao()::getSessionCount);
    };
}
  1. 测试策略:
    • 增加版本兼容性测试套件
    • 使用 Testcontainers 进行集成测试
    • 性能基准测试对比

7. 生态兼容情况

目前 Sa-Token 1.34.0 已验证兼容的组件:

  1. 数据库:

    • MySQL 8+
    • PostgreSQL 15+
    • Oracle 21c+
  2. 缓存:

    • Redis 7+
    • Memcached
  3. 微服务:

    • SpringCloud 2022+
    • Dubbo 3+
  4. 安全组件:

    • SpringSecurity 6+
    • OAuth2 1.1+

注意:如果项目中使用到 SpringSecurity 集成,需要同步升级 spring-security-oauth2 相关依赖到最新版本。

8. 后续维护计划

Sa-Token 团队公布的后续维护路线:

  1. 短期计划(3个月内):

    • 完善 GraalVM 原生镜像支持
    • 增强响应式编程支持
    • 优化文档和示例
  2. 中期规划(6个月):

    • 支持 Quarkus 框架
    • 提供 Kotlin DSL
    • 改进分布式事务支持
  3. 长期愿景:

    • 实现全栈式权限解决方案
    • 构建可视化配置平台
    • 增强云原生支持

对于企业用户,建议建立版本升级日历,定期评估框架更新情况。可以关注 Sa-Token 官方公众号获取实时更新通知。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐