You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus SmallRye:本地JWT验证密钥文件缓存刷新问题问询

解决Quarkus本地JWT验证密钥文件不刷新的问题

方法一:配置SmallRye JWT自动刷新间隔

Quarkus基于SmallRye JWT实现JWT验证,针对本地密钥文件,可通过配置开启自动刷新:

  • 在application.properties中添加刷新间隔配置:
    # 每30秒刷新一次本地密钥文件,支持s(秒)/m(分钟)/h(小时)等单位
    smallrye.jwt.verify.key.refresh-interval=30s
    
    修改本地JSON文件后,等待配置的间隔时间,服务会自动加载新密钥。

方法二:自定义密钥提供者(灵活控制刷新逻辑)

如果需要更精细的控制(比如监听文件变化实时刷新),可以自定义密钥定位器:

  1. 实现JWKSetLocator接口,每次调用时读取最新的本地文件内容:
    import io.smallrye.jwt.auth.principal.JWKSetLocator;
    import jakarta.enterprise.context.ApplicationScoped;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    @ApplicationScoped
    public class CustomJWKSetLocator implements JWKSetLocator {
    
        @Override
        public String getJWKSet(String location) {
            try {
                // 每次验证JWT时都会读取最新的本地文件内容
                return new String(Files.readAllBytes(Paths.get(location)));
            } catch (Exception e) {
                throw new RuntimeException("读取JWK集合文件失败", e);
            }
        }
    }
    
  2. 在application.properties中指定使用自定义定位器:
    smallrye.jwt.verify.jwk-set-locator=com.yourpackage.CustomJWKSetLocator
    

方法三:结合Quarkus配置刷新机制(针对配置路径变更)

如果需要通过修改配置切换密钥路径并实时生效,可开启Quarkus的配置刷新:

  1. 开启配置刷新功能:
    quarkus.config-refresh.enabled=true
    
  2. 将密钥位置配置标记为可刷新:
    smallrye.jwt.verify.key.location=${my.jwt.key.location:/path/to/default/jwks.json}
    quarkus.config-refresh.refreshable-configs=my.jwt.key.location
    
    修改my.jwt.key.location的值时,Quarkus会自动刷新密钥配置,加载新路径下的文件。

内容的提问来源于stack exchange,提问作者Timz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:12:48